Skip to content

Commit 8a6147e

Browse files
committed
Update solution 047
1 parent 646d61f commit 8a6147e

File tree

2 files changed

+33
-28
lines changed

2 files changed

+33
-28
lines changed

solution/047.Permutations II/README.md

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,32 @@ class Solution {
3333
tmp.add(val);
3434
}
3535

36-
// 已存在,则不添加
37-
if (!list.contains(tmp)) {
38-
list.add(tmp);
39-
return;
40-
}
36+
list.add(tmp);
4137

4238
}
4339

4440
for (int i = start; i <= end; ++i) {
45-
if (i == start) {
46-
permute(list, nums, start + 1);
47-
} else if (nums[i] != nums[start]) {
48-
// i 与 start 不相等,且对应的数组值也不相等,才进行交换
41+
if (isSwap(nums, start, i)) {
4942
swap(nums, i, start);
5043
permute(list, nums, start + 1);
5144
swap(nums, i, start);
5245
}
5346

5447
}
5548

56-
5749
}
5850

59-
private static void swap(int[] nums, int i, int j) {
51+
private boolean isSwap(int[] nums, int from, int to) {
52+
for (int i = from; i < to; ++i) {
53+
if (nums[i] == nums[to]) {
54+
// 相等,不进行交换
55+
return false;
56+
}
57+
}
58+
return true;
59+
}
60+
61+
private void swap(int[] nums, int i, int j) {
6062
int t = nums[i];
6163
nums[i] = nums[j];
6264
nums[j] = t;

solution/047.Permutations II/Solution.java

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,41 @@ public List<List<Integer>> permuteUnique(int[] nums) {
44
permute(list, nums, 0);
55
return list;
66
}
7-
7+
88
private void permute(List<List<Integer>> list, int[] nums, int start) {
99
int end = nums.length - 1;
1010
if (start == end) {
1111
List<Integer> tmp = new ArrayList<>();
1212
for (int val : nums) {
1313
tmp.add(val);
1414
}
15-
16-
// 已存在,则不添加
17-
if (!list.contains(tmp)) {
18-
list.add(tmp);
19-
return;
20-
}
21-
15+
16+
list.add(tmp);
17+
2218
}
23-
19+
2420
for (int i = start; i <= end; ++i) {
25-
if (i == start) {
26-
permute(list, nums, start + 1);
27-
} else if (nums[i] != nums[start]) {
28-
// i 与 start 不相等,且对应的数组值也不相等,才进行交换
21+
if (isSwap(nums, start, i)) {
2922
swap(nums, i, start);
3023
permute(list, nums, start + 1);
3124
swap(nums, i, start);
3225
}
33-
26+
27+
}
28+
29+
}
30+
31+
private boolean isSwap(int[] nums, int from, int to) {
32+
for (int i = from; i < to; ++i) {
33+
if (nums[i] == nums[to]) {
34+
// 相等,不进行交换
35+
return false;
36+
}
3437
}
35-
38+
return true;
3639
}
37-
38-
private static void swap(int[] nums, int i, int j) {
40+
41+
private void swap(int[] nums, int i, int j) {
3942
int t = nums[i];
4043
nums[i] = nums[j];
4144
nums[j] = t;

0 commit comments

Comments
 (0)