給定乙個陣列 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...