给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。
你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]
代码
class Solution {
List<Integer> temp = new ArrayList<Integer>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> permute(int[] nums) {
int n=nums.length;
for(int num:nums){
temp.add(num);
}
back(n,0);
return ans;
}
public void back(int n,int start){
if(start==n){
ans.add(new ArrayList<Integer>(temp));
}
for(int i=start;i<n;i++){
// 动态维护数组
//被用于交换在指定列表中的指定位置的元素
Collections.swap(temp, start, i);
back(n,start+1);
// 撤销操作
Collections.swap(temp, start, i);
}
}
}