面試騰訊演算法 組合總和

2021-10-09 19:59:54 字數 960 閱讀 6322

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

candidates 中的數字可以無限制重複被選取。

說明:所有數字(包括 target)都是正整數。

解集不能包含重複的組合。

示例 1:

輸入: candidates = [2,3,6,7], target = 7,

所求解集為:

[[7],

[2,2,3]

]示例 2:

輸入: candidates = [2,3,5], target = 8,

所求解集為:

[[2,2,2,2],

[2,3,3],

[3,5]

]方法:搜尋回溯

//乙個dfs裡面呼叫2個dfs函式,這樣的遞迴形成了乙個類似樹的結構

func combinationsum(candidates int, target int) (ans int)

var dfs func(target, idx int)

dfs = func(target, idx int)

if target == 0

// 直接跳過

dfs(target, idx+1)

// 選擇當前數

if target-candidates[idx] >= 0 }

dfs(target, 0)

return

}

乙個dfs裡面呼叫2個dfs函式,這樣的遞迴形成了乙個類似樹的結構,這個遞迴注意終止條件,每個數可以選也可以不選,因為陣列裡面的元素可以重複使用。力扣上的圖很詳細的表現了過程。

說明:和**均來自於力扣

組合總和 回溯演算法

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

演算法 組合總和 II

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

演算法 組合總和 III

題目 找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 9 的正整數,並且每種組合中不存在重複的數字。說明 所有數字都是正整數。解集不能包含重複的組合。示例 2 輸入 k 3,n 9 輸出 1,2,6 1,3,5 2,3,4 思路 又是一道組合,挺好的,書讀百遍其義自見,同型別的題多...