- 算法
回溯算法 - 核心思想
这是做的第一道回溯算法题目。回溯的主要是通过穷举解决组合问题,这种思想非常适合处理面试的问题。因为此方法虽然占有大量的时间复杂度,但是却能很快给出解答。给出一个回溯法的万能公式
List<Value> result;
void backtrack(路径,选择列表){
if(满足结束条件){
result.add(路径);
return;
}
for(选择:选择列表){
做选择;
backtrack(路径,选择列表);
撤销选择;
}
}
- 代码
class Solution {
List<List<Integer>> res = new LinkedList<>();
public List<List<Integer>> permute(int[] nums) {
LinkedList<Integer> track = new LinkedList<>();
search(nums,track);
return res;
}
void search(int[] nums,LinkedList<Integer> track){
if(track.size() == nums.length){
res.add(new LinkedList(track));
return;
}
for(int num:nums){
if(track.contains(num)){
continue;
}
track.add(num);
search(nums,track);
track.removeLast();
}
}
}