思路: 回溯法,终止条件为List长度为数组长度,使用数组标记当前下标是否已经被使用,回溯时remove一次List并使标记数组在当前下标下的状态为未使用 代码:
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
dfs(new ArrayList<>(),nums,new int[nums.length]);
return res;
}
public void dfs(List<Integer> temp,int[] nums,int[] isHave){
if(temp.size() == nums.length){
res.add(new ArrayList<>(temp));
return;
}
for(int i = 0;i < nums.length; i++){
if(isHave[i] == 1) continue;
temp.add(nums[i]);
isHave[i] = 1;
dfs(temp,nums,isHave);
temp.remove(temp.size() - 1);
isHave[i] = 0;
}
}
}
|