给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:固定一个数字,用for循环来调换其他数字,同时递归的来变换固定的数字。
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new LinkedList<>();
ArrayList<Integer> li = new ArrayList<>();
for(int i=0;i<nums.length;i++)
li.add(nums[i]);
test(list,li,0);
return list;
}
public void test(List<List<Integer>> list,ArrayList<Integer> li,int i){
if(i==li.size())
list.add(new ArrayList<Integer>(li));
for(int j=i;j<li.size();j++){
Collections.swap(li,i,j);
test(list,li,i+1);
Collections.swap(li,j,i);
}
}
}