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();