给定一个数字列表,返回其所有可能的排列。
样例
样例 1:
输入:[1]
输出:
[
[1]
]
样例 2:
输入:[1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
挑战
使用递归和非递归分别解决。
注意事项
你可以假设没有重复数字。
public class Solution {
/*
* @param nums: A list of integers.
* @return: A list of permutations.
*/
public List<List<Integer>> permute(int[] nums) {
// write your code here
ArrayList<List<Integer>> result=new ArrayList<List<Integer>>();
ArrayList<Integer> list=new ArrayList<Integer>();
if (nums==null) {
return result;
}
if (nums.length==0){
result.add(list);
return result;
}
permuteHelper(result,nums,0);
return result;
}
private void permuteHelper(ArrayList<List<Integer>> result,int [] nums,int i){
if (i==nums.length-1){
ArrayList<Integer> list1=new ArrayList<Integer>();
for (int k=0;k<nums.length;k++) {
list1.add(nums[k]);
}
result.add(list1);
} else{
for (int j=i;j<nums.length;j++){
swap(nums,i,j);
permuteHelper(result,nums,i+1);
swap(nums,i,j);
}
}
}
private void swap(int[] nums,int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
输入
查看差别
[1]
输出
[[1]]
期望答案
[[1]]