LeetCode題解 40 組合總和 II

2022-07-01 18:09:09 字數 1038 閱讀 9250

看完這篇題解,可以再看看這幾個問題:

題目:40. 組合總和 ii

本題與39. 組合總和類似,區別在於資料是否可以重複使用。

演算法步驟:

排序。方便進行剪枝判斷。

回溯。排列、組合類題目常用方法。

剪枝。提前去掉不符合的結果,降低時間複雜度。

去重。去重最簡單的方法是使用雜湊表,但是時間和空間複雜度會提高。

通過檢視遞迴樹(回溯本質是遞迴,會生成遞迴樹)

其中 [1,2,2'] 和 [1,2',2''] 是重複的。我們發現,出現重複的集合的原因是在同一層的出現相同的元素。

因此我們得到去重條件:相同元素只保留第乙個,即去掉相同元素的非第乙個元素。

if i > start && candidates[i] == candidates[i-1]
var ans int

var list int

func combinationsum2(candidates int, target int) int

sort.ints(candidates)

backtarck(candidates, 0, target)

return ans

}func backtarck(candidates int, start int, target int)

// logical code

for i:=start;istart && candidates[i] == candidates[i-1]

backtarck(candidates, i+1, target-candidates[i])

list = list[:len(list)-1] }}

複雜度分析:

LeetCode 40組合總數

給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...

LeetCode筆記 40組合總和

題目 給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1...

leetcode 40 組合總和

給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...