总结-深度优先|带重复元素的子集


给定一个可能具有重复数字的列表,返回其所有可能的子集
注意事项

  • 子集中的每个元素都是非降序的
  • 两个子集间的顺序是无关紧要的
  • 解集中不能包含重复子集
您在真实的面试中是否遇到过这个题? Yes 样例 【总结-深度优先|带重复元素的子集】如果 S = [1,2,2],一个可能的答案为:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]

class Solution { public: /* * @param nums: A set of numbers. * @return: A list of lists. All valid subsets. */ vector> subsetsWithDup(vector &nums) { // write your code here vector> numsets; vector numset; sort(nums.begin(), nums.end()); subsets(nums, numsets, numset, 0); return numsets; } void subsets(const vector &nums, vector> &numsets, vector numset, int pos) { numsets.push_back(numset); for (int i = pos; i < nums.size(); i++) { if (i != pos && nums[i] == nums[i - 1]) { continue; } numset.push_back(nums[i]); subsets(nums, numsets, numset, i + 1); numset.pop_back(); } }








    推荐阅读