leetcode 子集 中等

递归:每个数放或者不放,都递归一次
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<int> tmp; solve(nums, tmp, 0); return ans; } void solve(vector<int> &nums, vector<int> &tmp, int l) { if(l == nums.size()) { ans.emplace_back(tmp); return ; } tmp.emplace_back(nums[l]); solve(nums, tmp, l + 1); tmp.pop_back(); solve(nums, tmp, l + 1); } vector<vector<int>> ans; };
还有一个和全排列比较像的写法:
// 这样写是一样的。。。这样写就和全排列比较像 class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<int> tmp; solve(nums, tmp, 0); return ans; } void solve(vector<int> &nums, vector<int> &tmp, int l) { if(l == nums.size()) { ans.emplace_back(tmp); return ; } for(int i = l; i < nums.size(); ++ i) { tmp.emplace_back(nums[i]); solve(nums, tmp, i + 1); tmp.pop_back(); } solve(nums, tmp, nums.size()); // 注意这一句不要漏了, tmp.pop_back() 之后还要执行一次才对 } vector<vector<int>> ans; };

浙公网安备 33010602011771号