78.子集

思路:回溯,求子集的过程就是每个元素是否为子集元素的问题,逐一确认
代码:

//by me
class Solution {
public:
    void setnum(vector<vector<int>> &ans,int i,vector<int> &nums,vector<int> temp){
        if (i==nums.size()) {//压入最后的子集
            ans.push_back(temp);
        }
        else{
            setnum(ans, i+1, nums,temp);//舍弃
            temp.push_back(nums[i]);
            setnum(ans, i+1, nums,temp);//保留
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> ans;
        vector<int> temp;
        temp.clear();
        setnum(ans,0, nums,temp);
        return ans;
    }
};

讨论区及反思[https://leetcode.com/problems/subsets/discuss/27278/C++-RecursiveIterativeBit-Manipulation]
反思: 1、谨记回溯是对当前状态进行操作
2、条件边界确定,避免位定义行为

posted @ 2018-09-10 00:14  Kipper  阅读(72)  评论(0)    收藏  举报