leetcode39 組合總和 繼續回溯

2021-09-27 12:05:43 字數 1339 閱讀 8177

一.  這題一開始想肯定回溯法, 一開始想了個順其自然的思路,直接看**能理解,結果重複了.

//沒有去重,報錯

class solution

if (sum == target)

for (int i = 0; i < candidates.size(); i++)

} vector>combinationsum(vector& candidates, int target)

};

二.   參考大神非常好的講解, 感覺這篇寫的回溯非常不錯.

1.  重複的原因每次backtrace裡的for迴圈都從i=0開始,導致第一次的1,2和第二次的2,1重複(仔細理解一下,大概這個意思).

2. 解決辦法大神的意思是設定乙個start變數, i每次從start開始,這樣不會出現1,2和2,1 這種情況,而是1,2和2,2這種情況.

//大神解法,用start變數限制只能找當前及其以後的元素

三.  參考大神的動態規劃,因為大神說"隨著我把組合總和的ii、iii、iv做完,尤其是到iv的時候,回溯演算法就超時了,而iv恰好是用動態規劃解決的,於是我就思考:能不能用動態規劃求解本題."

1.總結:求解乙個值,需要求解上乙個值,進而需要求解上上個值...,這種方法就是動態規劃。重複的值只需要進行一次,而後再使用到這個值時,只需要將他的結果拿來適當增加即可。

//動態規劃

// 由@pris_bupt提供

vector> combinationsum(vector& candidates, int target) );

else if (i > it)

for (auto ivec : dict[i - it])

vector>ans;

for (auto it : dict[target]) ans.push_back(it);

return ans;

}

LeetCode 39 組合總和

給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...

leetcode39 組合總和

參考 class solution if next num.size target num next 0 邊界條件 return 對於每個元素,有兩種處理方式,選當前元素或者不選當前元素 psol.push back num next 選當前元素 search num,next,psol,targe...

LeetCode39組合總和

給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...