您的位置:首页 > 其它

LeetCode 46 Permutations

2017-07-01 12:02 573 查看
Given a collection of distinct numbers, return all possible permutations.

For example,

[1,2,3] have the following permutations:

[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

全排列,注意可以有重复的,比如:

input:112

output:

[[1,1,2],[1,2,1],[1,1,2],[1,2,1],[2,1,1],[2,1,1]]

那么可以用简单的回溯法了。不需要剪枝。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

public static List<list <Integer>> permute(int[] nums) {
List<integer> list = new ArrayList</integer><integer>(nums.length);
List<list <Integer>> result = new ArrayList<>((int) Math.pow(2, nums.length) - 1);
boolean[] visited = new boolean[nums.length];
if (nums.length == 0) {
result.add(new ArrayList<integer>());
return result;
}
search(nums, visited, nums.length, list, result);
return result;
}
 
public static void search(int[] nums, boolean[] visited, int cur, List</integer><integer> add, List<list <Integer>> list) {
if (cur == 0) {
list.add(new ArrayList<>(add));
return;
}
for (int i = 0; i < nums.length; i++) {
if (!visited[i]) {
add.add(nums[i]);
visited[i] = true;
search(nums, visited, cur - 1, add, list);
visited[i] = false;
add.remove(add.size() - 1);
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 leetcode 递归