以八皇后问题为考虑点的回溯法得好好整理下
List> list = new ArrayList();
Arrays.sort(candidates);//一个好习惯
backtrack(list, new ArrayList(),candidates,target,0);
return list;
}
public List> combinationSum(int[] candidates, int target) {
public void backtrack(List> list, ArrayList templist,int[] nums,int target,int start){
if(target<0) return; //递归边界
else if(target == 0) list.add(new ArrayList<>(templist));//完整数据边界
else{
for(int i =start; i
templist.add(nums[i]);
backtrack(list, templist,nums,target-nums[i],i);
//这里可以重复使用相同的数据
templist.remove(templist.size()-1);
}
}
}
对一个回溯理清得确定层数和边界 递归层数减少不必要的递归