即求n个不重复的数的组合。
思路:
先固定第一位,枚举第二位,。。。第n位,注意需要记录已经用过的数字。
用代码说话:
public class Solution {
public List<List<Integer>> ans = new ArrayList<>();
public boolean[] used = new boolean[100]; //記錄用過的數組
public int[] path = new int[100]; //記錄下標
public void robot(int index,int[] nums){
//边界条件 满足存储条件
if(index>=nums.length){
List<Integer> tmp = new ArrayList<>(); //临时存儲
//record ans
for(int i=0;i<nums.length;i++){
tmp.add(nums[path[i]]); //添加答案
}
ans.add(tmp);
return;
}
for(int i=0;i<nums.length;i++){
if(used[i]==false){ //下标如果没用过才可以进行记录
path[index]=i; //path记录下标信息
used[i]=true; //标记用过的下标
robot(index+1,nums);
used[i]=false;//进行下一步搜索时,这个下标应该还原成未用标记
}
}
}
public List<List<Integer>> permute(int[] nums) {
robot(0,nums);
return ans;
}
}