[leetcode] 子集
78. 子集 - 力扣(LeetCode)
//方法一
class Solution {vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> subsets(vector<int>& nums) {dfs(nums, 0);return ret;}void dfs(vector<int>& nums, int i){if(i == nums.size()) //注意判断条件,需要在叶子节点拿结果{ret.push_back(path);return;}//选path.push_back(nums[i]);dfs(nums, i + 1);path.pop_back(); //回溯//不选dfs(nums, i + 1);}
};
//方法二
class Solution {vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> subsets(vector<int>& nums) {dfs(nums, 0);return ret;}void dfs(vector<int>& nums, int pos){ret.emplace_back(path);for(int i = pos; i < nums.size(); i++){path.emplace_back(nums[i]);dfs(nums, i + 1);path.pop_back();}return;}
};
两种方法的相同点:都不需要剪枝
不同点:方法一的结果都在最底层的叶子结点且有递归条件,而方法二每个结点都是结果,并且没有递归条件