首页 > 其他分享 >Leetcode 90. 子集 II

Leetcode 90. 子集 II

时间:2022-10-29 16:33:31浏览次数:98  
标签:选择 nums int dfs II 子集 rec 90 Leetcode


给你一个整数数组 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
  • 首先明白什么时候会产生重复的情况,例如 [1, 2, 2] 。对于每一层搜索有两个选择,选择该数与不选择该数,当选了1后,对于第一个2来说,分为选择与不选择,产生1 2 与1 _ ,然后1 _ 遇上第二个2也会有选择与不选择的情况产生1 _ _ 和1 _ 2,这时候便产生重复。因此当上一步操作没有选择数,并且当前数与上一个数相同时,不进行当前数的选择。
class Solution {
List<List<Integer>> ans = new ArrayList<>();
LinkedList<Integer> rec = new LinkedList<>();
int n;
public List<List<Integer>> subsetsWithDup(int[] nums) {
n = nums.length;
Arrays.sort(nums);
dfs(0, nums, true); //从第一个位置开始搜索
return ans;
}

void dfs(int x, int[] nums, boolean sel) {
if (x == n) {
ans.add(new ArrayList<Integer>(rec));
return;
}
//不考虑放入x位置的数
dfs(x + 1, nums, false);
//考虑当前位置
if (!sel && x > 0 && nums[x] == nums[x - 1]) return;
rec.add(nums[x]);
dfs(x + 1, nums, true);
rec.removeLast();
}
}


标签:选择,nums,int,dfs,II,子集,rec,90,Leetcode
From: https://blog.51cto.com/u_15346163/5806252

相关文章

  • Leetcode 915. 分割数组
    给定一个数组nums,将其划分为两个连续子数组left和right,使得:left中的每个元素都小于或等于right中的每个元素。left和right都是非空的。left的长度......
  • Leetcode 934. 最短的桥
    给你一个大小为nxn的二元矩阵grid,其中1表示陆地,0表示水域。岛是由四面相连的1形成的一个最大组,即不会与非组内的任何其他1相连。grid中恰好存在两座岛。你......
  • leetcode94-二叉树的中序遍历
    94.二叉树的中序遍历迭代法,看别人的代码的,还需要琢磨一下/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;......
  • 0基础90分钟会用PS——GenJi笔记
    数码图像的相关基础概念1、位图和矢量图位图也叫点阵图像,位图使用也称像素的一格一格的小点来描述图像,图放大后我们可以看到像素点矢量图根据几何特性来绘制图形,用线......
  • LeetCode 1248. Count Number of Nice Subarrays
    原题链接在这里:https://leetcode.com/problems/count-number-of-nice-subarrays/题目:Givenanarrayofintegers nums andaninteger k.Acontinuoussubarrayis......
  • 0基础90分钟会用PS——GenJi笔记
    数码图像的相关基础概念1、位图和矢量图位图也叫点阵图像,位图使用也称像素的一格一格的小点来描述图像,图放大后我们可以看到像素点矢量图根据几何特性来绘制图形,用线......
  • 周六900C++班级2022-10-29 广搜
    7588:农夫抓牛农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:1、从X移动到X-1或X+......
  • react实战笔记90:完成购物车条
    控制是否可以选中......
  • 代码随想录day29 | 491. 递增子序列 46. 全排列 47. 全排列 II
    491.递增子序列题目|文章思路这个题中不能对这个序列进行重新排序,因此需要用到set进行去重实现点击查看代码classSolution{public:vector<vector<int>>f......
  • 代码随想录day28 | 93. 复原 IP 地址 78.子集 90. 子集 II
    93.复原IP地址题目|文章思路1.先判断每个部分是不是符合要求2.如果符合要求则加入path,递归下一层3.当遍历到字符串末尾,如果有四层,则加入结果,否则直接返回。实现......