File tree Expand file tree Collapse file tree 2 files changed +33
-28
lines changed
solution/047.Permutations II Expand file tree Collapse file tree 2 files changed +33
-28
lines changed Original file line number Diff line number Diff line change @@ -33,30 +33,32 @@ class Solution {
33
33
tmp. add(val);
34
34
}
35
35
36
- // 已存在,则不添加
37
- if (! list. contains(tmp)) {
38
- list. add(tmp);
39
- return ;
40
- }
36
+ list. add(tmp);
41
37
42
38
}
43
39
44
40
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)) {
49
42
swap(nums, i, start);
50
43
permute(list, nums, start + 1 );
51
44
swap(nums, i, start);
52
45
}
53
46
54
47
}
55
48
56
-
57
49
}
58
50
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 ) {
60
62
int t = nums[i];
61
63
nums[i] = nums[j];
62
64
nums[j] = t;
Original file line number Diff line number Diff line change @@ -4,38 +4,41 @@ public List<List<Integer>> permuteUnique(int[] nums) {
4
4
permute (list , nums , 0 );
5
5
return list ;
6
6
}
7
-
7
+
8
8
private void permute (List <List <Integer >> list , int [] nums , int start ) {
9
9
int end = nums .length - 1 ;
10
10
if (start == end ) {
11
11
List <Integer > tmp = new ArrayList <>();
12
12
for (int val : nums ) {
13
13
tmp .add (val );
14
14
}
15
-
16
- // 已存在,则不添加
17
- if (!list .contains (tmp )) {
18
- list .add (tmp );
19
- return ;
20
- }
21
-
15
+
16
+ list .add (tmp );
17
+
22
18
}
23
-
19
+
24
20
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 )) {
29
22
swap (nums , i , start );
30
23
permute (list , nums , start + 1 );
31
24
swap (nums , i , start );
32
25
}
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
+ }
34
37
}
35
-
38
+ return true ;
36
39
}
37
-
38
- private static void swap (int [] nums , int i , int j ) {
40
+
41
+ private void swap (int [] nums , int i , int j ) {
39
42
int t = nums [i ];
40
43
nums [i ] = nums [j ];
41
44
nums [j ] = t ;
You can’t perform that action at this time.
0 commit comments