打印集合中所有子集

 

 1 // PrintSubSet.cpp: 定义控制台应用程序的入口点。
 2 //
 3 /*
 4 打印集合中的所有子集,利用位运算
 5 */
 6 #include "stdafx.h"
 7 #include
 8 
 9 using namespace std;
10 
11 template
12 
13 void Print(T* array, int count, int index) {
14 	int mask = 1;
15 	for (int i = 0; i < count; i++) {
16 		if (mask&index) {
17 			//这里假设index是11110,代表原集合中第一个3没有出现,然后当mask(1)与index(11110)相与之后为0,所以不输出array[0],然后
18 			//mask左移一位变为:00010,与index(11110)相与之后结果为1,所以集合中对应的第二个元素26出现,所以打印array[1],依次类推
19 			cout << " "<

LeetCode中的代码:

class Solution {
public:
    vector> subsets(vector& nums) {
        int len=nums.size();
        int n=1<> result;
        for(int index=0;index temp=convertIntToSet(nums,index);
            result.push_back(temp);
        }
        return result;
    }
    
private:
    vector convertIntToSet(vector &nums, int k) {
            int index=0;
            vector temp;
            for(int i=k;i>0;i>>=1){
                if(i&1==1){
                    temp.push_back(nums[index]);
                }
                index++;
            }
        return temp;
    }
};

 

你可能感兴趣的:(算法)