Backtracking

来源:互联网 发布:汽车销售行业分析数据 编辑:程序博客网 时间:2024/06/16 19:13
以八皇后问题为考虑点的回溯法得好好整理下
public List> combinationSum(int[] candidates, int target){
      List> list = new ArrayList();
      Arrays.sort(candidates);//一个好习惯
      backtrack(list, newArrayList(),candidates,target,0);
      return list;
   }
public void backtrack(List> list, ArrayList templist,int[]nums,int target,int start){
if(target<0) return; //递归边界
else if(target == 0) list.add(newArrayList<>(templist));//完整数据边界
else{
for(int i =start; i
templist.add(nums[i]);
backtrack(list, templist,nums,target-nums[i],i);
//这里可以重复使用相同的数据
templist.remove(templist.size()-1);
}
}
}
对一个回溯理清得确定层数和边界 递归层数减少不必要的递归
0 0
原创粉丝点击