class Solution { public: vector<int> path;//路径 //输入角度,枚举每个数是否选中 void backtrack(vector<vector<int>>& res,vector<int>& nums,int i){ if (i==nums.size()){ res.emplace_back(path); return; } //不选当前节点,判断下一个节点 backtrack(res,nums,i+1); //选择 当前节点 path.emplace_back(nums[i]); backtrack(res,nums,i+1); path.pop_back(); } vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> res; backtrack(res,nums,0); return res; } };
class Solution { public: vector<int> path; //答案角度,每次必须选一个数 void backtrack(vector<vector<int>>& res,vector<int>& nums,int i,int sz){ res.emplace_back(path);//递归到的节点每次都是答案 if (i==sz){ return; } //枚举当前要填的数字 for(int j=i;j<sz;++j){ path.emplace_back(nums[j]); backtrack(res,nums,j+1,sz); path.pop_back(); } } vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> res; backtrack(res,nums,0,(int)nums.size()); return res; } };