http://oj.leetcode.com/problems/subsets/
计算一个集合的子集,使用vector<vector<int> >,使用了进制的思想。
#include<algorithm> #include<vector> #include<iostream> #include<cmath> using namespace std; class Solution { private: void myoutput(vector<int> &input) { for(int i=0;i<input.size();i++) cout<<input[i]<<" "; } int mypow(int i) { if(i ==0 ) return 1; int ret = 1; while(i--) ret *= 2; return ret; } public: vector<vector<int> > subsets(vector<int> &S) { // Note: The Solution object is instantiated only once and is reused by each test case. sort(S.begin(),S.end()); //myoutput(S); int sum = mypow(S.size()); //cout<<sum<<endl; //cout<<sum<<"sum"<<endl; vector<vector<int> > result; result.clear(); sum--; vector<int> tep_result; for(int i = sum;i>0;i--) { tep_result.clear(); int _sum = i; int digit = 0; while(_sum!=0) { if(_sum%2==1) tep_result.push_back(S[digit]); digit++; _sum /= 2; } result.push_back(tep_result); //二维vector的使用方式,是直接添加一维的 } tep_result.clear(); result.push_back(tep_result); //for(int j = 0;j<result.size();j++) //{ //cout<<"this:"; //myoutput(result[j]); //cout<<endl; //} return result; } }; #include<iostream> #include"solu.h" using namespace std; int main() { Solution *so = new Solution; vector<int> input; input.clear(); /*input.push_back(3); input.push_back(1); input.push_back(2); input.push_back(5);*/ so->subsets(input); //cout<<"ok"<<endl; if(so!=NULL) delete so; so = NULL; return 0; }