看完這篇題解,可以再看看這幾個問題:
題目: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,...