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 class Solution {
private List<List<Integer>> result = new ArrayList<List<Integer>>();
public List<List<Integer>> permute(int[] nums) {
generatePermute(nums,0,nums.length-1);
return result;
}
public void generatePermute(int[] nums,int i,int n){
if(i==n){
putToList(nums);
}else{
for(int k=i; k<=n; k++){
swap(nums, i, k);
generatePermute(nums, i+1, n);
swap(nums, i, k);
}
}
}
private static void swap(int [] nums,int i,int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
private void putToList(int[] nums) {
List<Integer> list = new ArrayList<Integer>();
for(int i:nums){
list.add(i);
}
result.add(list);
}
}