090.子集II

题目

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:
输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:
输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

JS实现

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsetsWithDup = function(nums) {
  const result = [];

  const len = nums.length;
  if (len === 0) {
    return result;
  }

  // 排序
  nums = nums.sort((a,b) => a - b);

  const dfs = (start, path) => {
    result.push(path.slice(0));
    for (let i = start; i < len; i++) {
      // 和上个数字相等就跳过
      if(i > start && nums[i] === nums[i - 1]) {
        continue;
      }
      path.push(nums[i]);
      dfs(i + 1, path);
      path.pop();
    }
  };

  dfs(0, []);
  return result;
};