Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 585f2bb

Browse files
add LeetCode 90. 子集 II
1 parent 1620a44 commit 585f2bb

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2Nob2NvbGF0ZTE5OTkvY2RuL2ltZy8yMDIwMDgyODE0NTUyMS5qcGc?x-oss-process=image/format,png)
2+
>仰望星空的人,不应该被嘲笑
3+
4+
## 题目描述
5+
6+
给定一个可能包含重复元素的整数数组 `nums`,返回该数组所有可能的子集(幂集)。
7+
8+
说明:解集不能包含重复的子集。
9+
10+
示例:
11+
12+
```javascript
13+
输入: [1,2,2]
14+
输出:
15+
[
16+
[2],
17+
[1],
18+
[1,2,2],
19+
[2,2],
20+
[1,2],
21+
[]
22+
]
23+
```
24+
25+
来源:力扣(LeetCode)
26+
链接:https://leetcode-cn.com/problems/subsets-ii
27+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
28+
29+
30+
31+
## 解题思路
32+
本题还是挺有意思的,我们要求的是子集,但是子集要进行去重操作,采用的做法是先对原数组进行排序,那么排序后的数组重复的元素必定是相邻的,然后在遍历解空间树的时候,要做一个去重的操作,当遇到重复出现,也就是和前面相邻元素相同的时候,直接跳过该节点,不让它向下递归。具体示意图如下:
33+
34+
![](https://img-blog.csdnimg.cn/20200918142141572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjQyOTcxOA==,size_16,color_FFFFFF,t_70#pic_center)
35+
<a href="https://leetcode-cn.com/problems/subsets-ii/solution/li-jie-li-jie-qu-zhong-cao-zuo-by-jin-ai-yi/">参考大佬题解</a>
36+
37+
`dfs`的话,一条路会一直走下去,然后回溯回来,在走之前,`start`是当前层第一个元素,只有当前元素下标大于 `start`才会有重复元素,而对于不同层的重复元素,我们不应该切断,应该继续走,不然就不会有 `[1,2,2]`这样的子集出现了。
38+
39+
40+
```javascript
41+
var subsetsWithDup = function(nums) {
42+
let res = [];
43+
nums.sort((a,b)=>a-b);
44+
let dfs = (t,start) => {
45+
res.push(t);
46+
for(let i=start;i<nums.length;i++){
47+
// 同层重复,跳过
48+
if(i>start && nums[i-1] == nums[i]) continue;
49+
t.push(nums[i]);
50+
dfs(t.slice(),i+1);
51+
t.pop();
52+
}
53+
}
54+
dfs([],0);
55+
return res;
56+
};
57+
```
58+
59+
## 最后
60+
文章产出不易,还望各位小伙伴们支持一波!
61+
62+
往期精选:
63+
64+
<a href="https://github.com/Chocolate1999/Front-end-learning-to-organize-notes">小狮子前端の笔记仓库</a>
65+
66+
<a href="https://yangchaoyi.vip/">访问超逸の博客</a>,方便小伙伴阅读玩耍~
67+
68+
![](https://img-blog.csdnimg.cn/2020090211491121.png#pic_center)
69+
70+
```javascript
71+
学如逆水行舟,不进则退
72+
```
73+
74+
75+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /