組合總和II 回溯法C語言

2021-10-01 14:25:17 字數 1393 閱讀 6568

給定乙個陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的每個數字在每個組合中只能使用一次。

說明:所有數字(包括目標數)都是正整數。 解集不能包含重複的組合。 示例 1:

輸入: candidates = [10,1,2,7,6,1,5], target = 8,

所求解集為: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]

示例 2:

輸入: candidates = [2,5,2,1,2], target = 5,

所求解集為: [ [1,2,2], [5] ]

int

cmp(

const

void

* a1,

const

void

* a2)

void

dfs(

int first,

int*path,

int depth,

int*candidates,

int target,

int candidatessize,

int*

*result,

int*size,

int*returncolumnsizes)

if(candidates[i]

>target)

continue

; path[depth]

=candidates[i]

;

depth++

;int sum=0;

for(

int j=

0;j(sum==target)

returncolumnsizes[

*size]

=depth;

*size=

*size+1;

}if(sumdepth--;}

}int**

combinationsum2

(int

* candidates,

int candidatessize,

int target,

int* returnsize,

int*

* returncolumnsizes)

執行結果:

通過顯示詳情

執行用時 :

12 ms

, 在所有 c 提交中擊敗了

71.45%

的使用者記憶體消耗 :

10.1 mb

, 在所有 c 提交中擊敗了

62.50%

的使用者

40 組合總和 II(回溯)

給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...

組合總和(回溯)

思路 回溯法 剪枝法 相當不錯的題目,遞迴三部曲 1.遞迴什麼時候結束 當target為0時,遞迴結束 2.每個遞迴的返回值是什麼 每個遞迴結束後表示已經完成了後續的剪枝操作 3.每級遞迴中要做的事 遍歷選取當前要剪的那個枝,即把當前的所有的數字 枝 依次過一遍 依次壓入 彈出 如輸入 candid...

組合總和II

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