Skip to content

Commit 010878c

Browse files
committed
五刷90
1 parent a5bafcc commit 010878c

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

docs/0090-subsets-ii.adoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ include::{sourcedir}/_0090_SubsetsII_31.java[tag=answer]
9292
include::{sourcedir}/_0090_SubsetsIi_4.java[tag=answer]
9393
----
9494
--
95+
96+
四刷::
97+
+
98+
--
99+
[{java_src_attr}]
100+
----
101+
include::{sourcedir}/_0090_SubsetsIi_5.java[tag=answer]
102+
----
103+
--
95104
====
96105

97106
== 参考资料

logbook/202503.adoc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ endif::[]
7373
|{counter:codes2503e}
7474
|{leetcode_base_url}/subsets-ii/[90. 子集 II]
7575
|{doc_base_url}/0090-subsets-ii.adoc[题解]
76-
|⭕️ ✅
76+
|⭕️ ✅
7777

7878
|{counter:codes2503e}
7979
|{leetcode_base_url}/house-robber-iv/[2560. 打家劫舍 IV^]
@@ -2650,6 +2650,11 @@ endif::[]
26502650
|{doc_base_url}/0322-coin-change.adoc[题解]
26512651
|✅ 动态规划。无限背包问题。
26522652

2653+
|{counter:codes2503}
2654+
|{leetcode_base_url}/subsets-ii/[90. 子集 II]
2655+
|{doc_base_url}/0090-subsets-ii.adoc[题解]
2656+
|✅ 子集模式。需要注意重复元素的处理。如果元素中有重复元素,那么就需要先对元素排序,遇到重复元素时,就不能对虽有已有元素都添加新元素了。只需要针对上一次新添加的子集添加新元素即可,依次执行,直到有不重复元素则再次恢复成从全部子集添加元素。
2657+
26532658
|===
26542659

26552660

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import jnr.ffi.annotations.In;
4+
5+
import java.util.ArrayList;
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public class _0090_SubsetsIi_5 {
10+
// tag::answer[]
11+
12+
/**
13+
* @author D瓜哥 · https://www.diguage.com
14+
* @since 2025-12-18 21:30:25
15+
*/
16+
public List<List<Integer>> subsetsWithDup(int[] nums) {
17+
Arrays.sort(nums);
18+
List<List<Integer>> result = new ArrayList<>(1 << nums.length);
19+
result.add(List.of());
20+
result.add(List.of(nums[0]));
21+
int size = result.size();
22+
int addSize = 1;
23+
for (int i = 1; i < nums.length; i++) {
24+
int num = nums[i];
25+
size = result.size();
26+
int index = 0;
27+
if (nums[i] == nums[i - 1]) {
28+
index = size - addSize;
29+
}
30+
addSize = 0;
31+
for (int j = index; j < size; j++) {
32+
List<Integer> next = new ArrayList<>(result.get(j));
33+
next.add(num);
34+
result.add(next);
35+
addSize++;
36+
}
37+
}
38+
return result;
39+
}
40+
// end::answer[]
41+
}

0 commit comments

Comments
 (0)