image.PNG 问题地址:39组合和 - LeetCode
给你没有重复的元素整数数组candidates
和目标整数target
找出答案candidates
您可以制作目标的数量和数量target
在所有不同的组合并以列表形式返回。 您可以按:以任何顺序返回这些组合。 candidates
相同数字可以选择无限重复
如果以不同的数量选择至少一个数字,则两种组合是不同的。 对于给定的输入,保证和 for 是target
不同组合的数量更少块。
使用递归和回溯是因为数组的编号可以无限使用,所以第一步是先去重,减少提前结束递归的循环次数,在判断第一个数字可以提前结束递归时使用索引,这样可以避免重复使用之前已经加到总数中的索引。 当然,您可以使用自己的索引。 去重思路:数组是排序的,从不重复,回溯后不需要一直从头开始,因为前一个已经加到总判断中,可以从当前索引继续递归。
public list>result = new arraylist<>(
public list> combinationsum(int candidates, int target)
递归。 public void process(listsortlist,deque path,int target,int beginindex)
联接结果集。
if(target == 0)
如果不防止重复,则将避免使用以前重复过的数字,但可以使用自己的坐标。
for(int a= beginindex;a
integer current = sortlist.get(a);
联接当前结果集。
path.addlast(current);
递归。 process(sortlist,path,target-current,a);
回溯时,需要从当前结果集中删除原始值。
path.removelast();