|
1 | 1 | [#0078-subsets] |
2 | | -= 78. Subsets |
| 2 | += 78. 子集 |
3 | 3 |
|
4 | | -{leetcode}/problems/subsets/[LeetCode - Subsets^] |
| 4 | +https://leetcode.cn/problems/subsets/[LeetCode - 78. 子集^] |
5 | 5 |
|
6 | | -Given a set of *distinct* integers, nums, return all possible subsets (the power set). |
| 6 | +给你一个整数数组 `nums` ,数组中的元素 *互不相同*。返回该数组所有可能的子集(幂集)。 |
7 | 7 |
|
8 | | -*Note:* The solution set must not contain duplicate subsets. |
| 8 | +解集 *不能* 包含重复的子集。你可以按 *任意顺序* 返回解集。 |
| 9 | + |
| 10 | +*示例 1:* |
| 11 | + |
| 12 | +.... |
| 13 | +输入:nums = [1,2,3] |
| 14 | +输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] |
| 15 | +.... |
| 16 | + |
| 17 | +*示例 2:* |
| 18 | + |
| 19 | +.... |
| 20 | +输入:nums = [0] |
| 21 | +输出:[[],[0]] |
| 22 | +.... |
| 23 | + |
| 24 | +*提示:* |
| 25 | + |
| 26 | +* `1 \<= nums.length \<= 10` |
| 27 | +* `-10 \<= nums[i] \<= 10` |
| 28 | +* `nums` 中的所有元素 *互不相同* |
9 | 29 |
|
10 | | -.Example: |
11 | | ----- |
12 | | -Input: nums = [1,2,3] |
13 | | -Output: |
14 | | -[ |
15 | | - [3], |
16 | | - [1], |
17 | | - [2], |
18 | | - [1,2,3], |
19 | | - [1,3], |
20 | | - [2,3], |
21 | | - [1,2], |
22 | | - [] |
23 | | -] |
24 | | ----- |
25 | 30 |
|
26 | 31 | == 思路分析 |
27 | 32 |
|
28 | | -这道题跟 xref:0090-subsets-ii.adoc[90. Subsets II] 类似。 |
| 33 | +这道题跟 xref:0090-subsets-ii.adoc[90. Subsets II] 类似:使用 xref:0000-25-subsets.adoc[Subsets 子集] 模式即可轻松解决。 |
| 34 | + |
| 35 | +以空集为起点,每次都在已有子集后面添加新元素来构建新的子集。处理完所有元素时,就生成了全部子集。 |
| 36 | + |
| 37 | +如果元素中有重复元素,那么就需要先对元素排序,遇到重复元素时,就不能对虽有已有元素都添加新元素了(因为前一个元素重复,那么对全部已有元素添加新元素就会有重复自己)。只需要针对上一次新添加的子集添加新元素即可,依次执行,直到有不重复元素则再次恢复成从全部子集添加元素。 |
29 | 38 |
|
30 | 39 | image::images/0078-subsets-recursion.png[{image_attr}] |
31 | 40 |
|
@@ -56,11 +65,22 @@ include::{sourcedir}/_0078_Subsets.java[tag=answer] |
56 | 65 | include::{sourcedir}/_0078_Subsets_2.java[tag=answer] |
57 | 66 | ---- |
58 | 67 | -- |
| 68 | +
|
| 69 | +三刷:: |
| 70 | ++ |
| 71 | +-- |
| 72 | +[{java_src_attr}] |
| 73 | +---- |
| 74 | +include::{sourcedir}/_0078_Subsets_3.java[tag=answer] |
| 75 | +---- |
| 76 | +-- |
59 | 77 | ==== |
60 | 78 |
|
| 79 | + |
61 | 80 | == 参考资料 |
62 | 81 |
|
| 82 | +. https://leetcode.cn/problems/subsets/solutions/2059409/hui-su-bu-hui-xie-tao-lu-zai-ci-pythonja-8tkl/[78. 子集 - 三种写法:选或不选/枚举选哪个/二进制枚举^] |
| 83 | +. https://leetcode.cn/problems/subsets/solutions/229569/c-zong-jie-liao-hui-su-wen-ti-lei-xing-dai-ni-gao-/[78. 子集 - C++,总结了回溯问题类型,带你搞懂回溯算法(大量例题)^] |
63 | 84 | . https://leetcode.cn/problems/subsets/solutions/420294/zi-ji-by-leetcode-solution/[78. 子集 - 官方题解^] |
64 | 85 | . https://leetcode.cn/problems/subsets/solutions/2566767/dai-ma-sui-xiang-lu-leetcode78zi-ji-by-c-yujc/[78. 子集 - 代码随想录^] |
65 | | -. https://leetcode.cn/problems/subsets/solutions/229569/c-zong-jie-liao-hui-su-wen-ti-lei-xing-dai-ni-gao-/[78. 子集 - C++,总结了回溯问题类型,带你搞懂回溯算法(大量例题)^] |
66 | | - |
| 86 | +. https://leetcode.cn/problems/subsets/solutions/135419/hui-su-si-xiang-tuan-mie-pai-lie-zu-he-zi-ji-wen-t/[78. 子集 - 回溯思想团灭排列、组合、子集问题^] |
0 commit comments