Skip to content

Commit 9d45da6

Browse files
committed
回溯法 开头 基础+排列
1 parent 78e7fd5 commit 9d45da6

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package BackTracking;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
/**
8+
* Created by 周杰伦 on 2018/4/1.
9+
*/
10+
public class 找出有重复数字的组合 {
11+
public List<List<Integer>> permuteUnique(int[] nums) {
12+
List<List<Integer>> ret = new ArrayList<>();
13+
List<Integer> permuteList = new ArrayList<>();
14+
Arrays.sort(nums);
15+
boolean[] visited = new boolean[nums.length];
16+
backtracking(permuteList, visited, nums, ret);
17+
return ret;
18+
}
19+
20+
private void backtracking(List<Integer> permuteList, boolean[] visited, int[] nums, List<List<Integer>> ret) {
21+
if (permuteList.size() == nums.length) {
22+
ret.add(new ArrayList(permuteList));
23+
return;
24+
}
25+
26+
for (int i = 0; i < visited.length; i++) {
27+
if (i != 0 && nums[i] == nums[i - 1] && !visited[i - 1]) continue;
28+
if (visited[i]) continue;
29+
visited[i] = true;
30+
permuteList.add(nums[i]);
31+
backtracking(permuteList, visited, nums, ret);
32+
permuteList.remove(permuteList.size() - 1);
33+
visited[i] = false;
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)