Skip to content

Commit d442ad1

Browse files
committed
四刷46
1 parent a4c77f4 commit d442ad1

File tree

3 files changed

+78
-19
lines changed

3 files changed

+78
-19
lines changed

Diff for: docs/0046-permutations.adoc

+38-18
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,36 @@
11
[#0046-permutations]
2-
= 46. Permutations
2+
= 46. 全排列
33

4-
{leetcode}/problems/permutations/[LeetCode - Permutations^]
4+
https://leetcode.cn/problems/permutations/[LeetCode - 46. 全排列 ^]
55

6-
Given a collection of *distinct* integers, return all possible permutations.
6+
给定一个不含重复数字的数组 `nums` ,返回其 _所有可能的全排列_ 。你可以 *按任意顺序* 返回答案。
77

8-
*Example:*
8+
*示例 1:*
99

10-
[subs="verbatim,quotes,macros"]
11-
----
12-
*Input:* [1,2,3]
13-
*Output:*
14-
[
15-
[1,2,3],
16-
[1,3,2],
17-
[2,1,3],
18-
[2,3,1],
19-
[3,1,2],
20-
[3,2,1]
21-
]
22-
----
10+
....
11+
输入:nums = [1,2,3]
12+
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
13+
....
14+
15+
*示例 2:*
16+
17+
....
18+
输入:nums = [0,1]
19+
输出:[[0,1],[1,0]]
20+
....
21+
22+
*示例 3:*
23+
24+
....
25+
输入:nums = [1]
26+
输出:[[1]]
27+
....
28+
29+
*提示:*
30+
31+
* `+1 <= nums.length <= 6+`
32+
* `+-10 <= nums[i] <= 10+`
33+
* `nums` 中的所有整数 *互不相同*
2334
2435
== 思路分析
2536

@@ -93,14 +104,23 @@ include::{sourcedir}/_0046_Permutations_2.java[tag=answer]
93104
----
94105
--
95106
96-
二刷::
107+
三刷::
97108
+
98109
--
99110
[{java_src_attr}]
100111
----
101112
include::{sourcedir}/_0046_Permutations_3.java[tag=answer]
102113
----
103114
--
115+
116+
四刷::
117+
+
118+
--
119+
[{java_src_attr}]
120+
----
121+
include::{sourcedir}/_0046_Permutations_4.java[tag=answer]
122+
----
123+
--
104124
====
105125

106126
== 参考资料

Diff for: logbook/202503.adoc

+6-1
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,16 @@ endif::[]
165165
|{doc_base_url}/0033-search-in-rotated-sorted-array.adoc[题解]
166166
|⭕️ 重点关注有序部分,优先在有序部分查找,不在有序部分再去无序部分查找。注意判定有序部分的方法: `nums[0]``nums[mid]` 相比较,而不是 `nums[left]`(它的值会来回变)。
167167

168-
|{counter:codes}
168+
|{counter:codes2503}
169169
|{leetcode_base_url}/number-of-islands/[200. 岛屿数量^]
170170
|{doc_base_url}/0200-number-of-islands.adoc[题解]
171171
|✅ 想尝试并查集,结果失败。还是沉岛大法好啊!
172172

173+
|{counter:codes2503}
174+
|{leetcode_base_url}/permutations/[46. 全排列^]
175+
|{doc_base_url}/0046-permutations.adoc[题解]
176+
|✅ 回溯
177+
173178
|===
174179

175180
截止目前,本轮练习一共完成 {codes2503} 道题。
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class _0046_Permutations_4 {
7+
// tag::answer[]
8+
/**
9+
* @author D瓜哥 · https://www.diguage.com
10+
* @since 2024-09-18 22:11:50
11+
*/
12+
public List<List<Integer>> permute(int[] nums) {
13+
List<List<Integer>> result = new ArrayList<>();
14+
backtrack(nums, result, new ArrayList<>(), new boolean[nums.length]);
15+
return result;
16+
}
17+
18+
private void backtrack(int[] nums, List<List<Integer>> result, List<Integer> added, boolean[] used) {
19+
if (added.size() == nums.length) {
20+
result.add(new ArrayList<>(added));
21+
}
22+
for (int i = 0; i < nums.length; i++) {
23+
if (used[i]) {
24+
continue;
25+
}
26+
used[i] = true;
27+
added.add(nums[i]);
28+
backtrack(nums, result, added, used);
29+
used[i] = false;
30+
added.remove(added.size() - 1);
31+
}
32+
}
33+
// end::answer[]
34+
}

0 commit comments

Comments
 (0)