题目描述:
代码如下:
class Solution {
List<List<Integer>> res=new LinkedList<List<Integer>>();
public List<List<Integer>> permute(int[] nums) {
LinkedList<Integer> track=new LinkedList<Integer>();
backtrack(nums,track);
return res;
}
public void backtrack(int []nums,LinkedList<Integer> track){
//结束条件
if(track.size()==nums.length){
//所以数字按某些顺序排好了
res.add(new LinkedList(track));
}
for(int i=0;i<nums.length;i++){
//不要非法的选择 这里即不选择重复的数据
if(track.contains(nums[i])){
continue;
}
//做选择
track.add(nums[i]);
backtrack(nums,track);//进入下一层决策树
//撤销选择
track.removeLast();
}
}
}
总结:
回溯算法的解题思路:
//找到结束的条件
for(选择:选择排序)
{
//排除不合法的选择
//做出选择
//进入下一层决策树
//撤销选择
}