给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
分析:与组合问题不同在于,排列问题,所有结果的长度都是一定的,并且元素不可以重复使用,这样就需要一个flag的boolean型数组来记录是否使用过该元素,同时需要一个变量来记录当前数组的长度,当长度达到指定值时,就将路径填入结果,并且结束本次递归
参考代码:
public List> permute(int[] nums) {
boolean[] flag=new boolean[nums.length];
sup(nums,0,0,flag);
return ret;
}
List> ret = new ArrayList<>();
LinkedList
private void sup(int[] nums,int index,int k,boolean[] flag){
if(k==nums.length){
ret.add(new ArrayList<>(path));
return;
}
for(int i=0;i
flag[i]=true;
k++;
path.add(nums[i]);
sup(nums,i+1,k,flag);
flag[i]=false;
k—;
path.removeLast();
}
}
