Given a set of distinct integers,?S, return all possible subsets.
分析:題目就是給一個整數集合,給出所以的子集。 基本思想是遞歸或者說是迭代的方法。用前面得到的集合來構造
后面的。但是怎樣高效、方便的構造集合是關鍵點。比如,開始想到的是先生成集合中0個元素、1個元素。。。逐步增多
但這樣很難實現。實際高效的做法是用i個元素生成所有子集,然后往里面添加第(i+1)個元素,將得到的元素集合加到前面結果
中,就可以得到最終的結果了。
1 class Solution { 2 public: 3 vector<vector<int> > subsets(vector<int> &S) { 4 vector<vector<int> > sets; 5 vector<int> subs; 6 sort(S.begin(),S.end()); 7 sets.push_back(subs); 8 for(int i=0;i<S.size();i++) 9 { 10 int c_size = sets.size(); 11 for(int j=0;j<c_size;j++) 12 { 13 subs = sets[j]; 14 subs.push_back(S[i]); 15 sets.push_back(subs); 16 } 17 } 18 19 return sets; 20 } 21 };
代碼非常的簡潔,但是注意第10行,是每次加之前,需要記錄集合中已有的子集個數,否則后面size變化,會導致死循環!