LeetCode 39 組合總和 題解

2021-09-29 10:46:00 字數 1412 閱讀 3194

給定乙個包含無重複元素的陣列candidates和乙個目標數target,找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。

vectorint>> res;

void

dfs(

int depth,

int target, vector<

int> nums, vector<

int> candidates)

if(depth >= candidates.

size()

|| target <0)

for(

int i =

0; i * candidates[depth]

<= target; i++

)dfs

(depth +

1, target - candidates[depth]

* i, nums, candidates)

;for

(int j =

0; j < i; j++)}

}vectorint>>

combinationsum

(vector<

int>

& candidates,

int target)

我最初採用這個寫法來做,在考慮到candidate[depth]將其所有可能出現的情況都通過乙個for迴圈產生,這樣寫的時間和空間都比較差,但是也能通過,後來參考了乙個網上的寫法。

vector<

int> nums;

vectorint>> res;

void

dfs(

int i, vector<

int> candidates,

int target)

for(

; i < candidates.

size()

; i++

)else}}

vectorint>>

combinationsum

(vector<

int>

& candidates,

int target)

我的想法與這個演算法相同,只是他在每一層dfs搜尋的時候只會放入乙個元素,但是時間和空間佔比就會小的很多,本來以為是由於排序的原因,因為排序會將很多大的數字放在後面,這樣可以最大化的利用target個人猜測是由於我的那種寫法對nums的修改是通過for迴圈一次完成,而這種寫法是迭代式的增加的,所以更為節約時間,另外他將nums作為了全域性變數,這樣在遞迴呼叫的時候也會節約一些棧上的空間。

這兩種實現,演算法本質上是相同的,但是因為一些細節問題,導致時間相差比較大。

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...