您的位置:首页 > 其它

Permutation I

2016-05-12 08:51 141 查看
【题目】Given a collection of 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]
,
and
[3,2,1]
【题意】
全排列
【分析】
遍历字符串,然后将当前遍历的字符和首字符交换位置,调用本函数处理首字符之后的子字符串,函数执行完后,再调换回来。在不需要复制字符串的情况下,避免了每次递归函数相互之间的影响。实现:
public ArrayList<ArrayList<Integer>> permutations(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
permute(num, 0, result);
return result;
}void permute(int[] num, int start, ArrayList<ArrayList<Integer>> result) {if (start >= num.length) {
ArrayList<Integer> item = convertArrayToList(num);
result.add(item);
}for (int j = start; j <= num.length - 1; j++) {
swap(num, start, j);
permute(num, start + 1, result);
swap(num, start, j);
}
}private ArrayList<Integer> convertArrayToList(int[] num) {
ArrayList<Integer> item = new ArrayList<Integer>();
for (int h = 0; h < num.length; h++) {
item.add(num[h]);
}
return item;
}private void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: