全排列
题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路分析
可以分为两个步骤:步骤一,把字符串分为第一个字符和后面一部分字符串,确定第一个字符。步骤二,固定第一个字符,给后面的字符串再作全排列。通过递归实现,代码如下:
public List<List<Integer>> permute(int[] nums) {
return process(nums,0,new ArrayList<>());
}
public List<List<Integer>> process(int[] nums,int index,List<List<Integer>> list){
if(index==nums.length-1){
ArrayList<Integer> arrayList=new ArrayList<>();
for (int num : nums) {
arrayList.add(num);
}
list.add(arrayList);
}else {
for (int i = index; i < nums.length; i++) {
swap(nums,i,index);
process(nums,index+1,list);
swap(nums,i,index);
}
}
return list;
}
private void swap(int[] nums, int i, int index) {
int temp=nums[i];
nums[i]=nums[index];
nums[index]=temp;
}