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、条件边界确定,避免位定义行为

浙公网安备 33010602011771号