LeetCode 78. 子集 C++(位运算和回溯法)

位运算

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> result;
        int max_num = 1 << nums.size();
        for (int i = 0 ; i < max_num;i++){
            vector<int> item;
            for(int j = 0;j < nums.size();j++){
                if(i & (1 << j)){
                    item.push_back(nums[j]);
                }
            }
            result.push_back(item);    
        }
        return result;
    }
};

#回溯法


class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int> item;
        vector<vector<int> >result;
        result.push_back(item);
        Creatset(0,nums,item,result);
        return result;

    }
    void Creatset(int i,vector<int> &nums,
                  vector<int>& item, vector< vector<int> > &result  ){
                      if( i >= nums.size() ){
                          return;
                      }
                      item.push_back(nums[i]);
                      result.push_back(item);
                      Creatset(i + 1,nums,item,result);
                      item.pop_back();
                      Creatset(i + 1,nums,item,result);
            }
};
posted @ 2020-05-12 15:36  clienter  阅读(70)  评论(0)    收藏  举报