LeetCode OJ——Subsets

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;
}

  

原文地址:https://www.cnblogs.com/qingcheng/p/3377884.html