您的位置:首页 > 其它

[LeetCode]Permutations

2014-06-11 15:19 295 查看

题目描述

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]
.
给出数组数字的全排列

解题思路

采用递归。

我们求整个数组的全排列,可以看成求index = 0位置的所有数字,然后对每一种情况求index=[1,num.length - 1]的子数组的全排列,然后递归求解即可。

代码

public static List<List<Integer>> permute(int[] num) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
permutation(num,0,list);
return list;
}


递归求解
/**
* 递归求解全排列
* @param num
* @param curIndex
* @param pList
*/
public static void permutation(int[] num,int curIndex,List<List<Integer>> pList){
if(curIndex==num.length){
//已无可交换的数字
List<Integer> list = new ArrayList<Integer>();
//添加的返回列表中
for(int i = 0;i < num.length;i++){
list.add(num[i]);
}
pList.add(list);
} else {
for(int i = curIndex;i < num.length ;i++){
//交换当前子数组的num[curIndex]和num[i]
int temp = num[curIndex];
num[curIndex] = num[i];
num[i] = temp;

//[curIndex + 1, num.length - 1]的全排列
permutation(num, curIndex+1, pList);

//交换当前子数组的num[curIndex]和num[i],还原成初始状态
temp = num[curIndex];
num[curIndex] = num[i];
num[i] = temp;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: