回溯法的应用:
回溯法和递归法类似,但回溯法每次进入递归和出递归的时候都会保持一个状态。换句话说,当结束递归的时候,会恢复之前的状态,双方互不影响。
class Solution {
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
if(nums==null||nums.length==0) return result;
backtrack(nums,new ArrayList<Integer>());
return result;
}
public void backtrack(int[] nums,ArrayList<Integer> curr){
if(nums.length==curr.size()){
result.add(new ArrayList(curr));
return;
}
for(int i=0;i<nums.length;i++){
if(curr.contains(nums[i])) continue;
curr.add(nums[i]);
backtrack(nums,curr);
curr.remove(curr.size()-1);
}
}
}
这是我的推演手稿,可能手绘的并不好。希望能帮助到读者。