思路:和剑指offer38 字符串的排列有不同的地方在于本题默认输入的数组里是没有重复数字的。
public List<List<Integer>> permute(int[] nums){
List<List<Integer>> res=new ArrayList<>();
if(nums.length==0||nums==null) return res;
Deque<Integer> path=new ArrayDeque<>();
boolean[] used=new boolean[nums.length];
dfs(nums,0,used,path,res);
return res;
}
public void dfs(int[] nums, int index,boolean[] used, Deque<Integer> path, List<List<Integer>> res){
if(index==nums.length){
res.add(new ArrayList<>(path));
return;
}
for(int i=0;i<nums.length;i++){
if(!used[i]){
path.add(nums[i]);
used[i]=true;
dfs(nums,index+1,used,path,res);
used[i]=false;
path.removeLast();
}
}
}