排列问题,涉及到回溯,一般这种为了优化(相对于暴力),dfs,需要用到额外的空间,但这又涉及到,你用多少的额外空间,一般最好就是两个list,一个标记数组
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> ans=new ArrayList<>();
List<Integer> path=new ArrayList<>();
boolean[] used=new boolean[nums.length];
int len=nums.length;
dfs(nums,used,0,len,path,ans);
return ans;
}
public void dfs(int[] nums,boolean[] used,int depth,int len,List<Integer> path,List<List<Integer>> ans){
if(depth==len){
ans.add(new ArrayList<>(path));
return;
}
for(int i=0;i<nums.length;i++){
if(used[i]==false){
path.add(nums[i]);
used[i]=true;
dfs(nums,used,depth+1,len,path,ans);
used[i]=false;
path.remove(path.size()-1);
}
}
}
}