leetCode.90. 子集 II
题目思路
代码
class Solution {
public:vector<vector<int>> res;vector<int> path;vector<vector<int>> subsetsWithDup(vector<int>& nums) {// 先排序,让有相同元素的都放到一起sort(nums.begin(), nums.end());dfs(nums,0);return res;}void dfs(vector<int>& nums, int u) {if (u == nums.size()) {res.push_back(path);return;}int k = u + 1;// 判断重复元素出现的次数while (k < nums.size() && nums[u] == nums[k]) ++ k;// 从nus[u]开始,一直存放到相同元素出现的次数,共计存放 o ~ 当前所在位置所有元素的次数 + 相同元素的次数for (int i = 0; i <= k - u; ++ i) {dfs(nums, k); // 先这样,可以表示可以相同元素存0次path.push_back(nums[u]);}// 剪枝for (int i = 0; i <= k - u; ++ i) {path.pop_back();}}
};