LeetCode 39 組合總和

2022-06-23 20:51:09 字數 1148 閱讀 5449

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

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

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

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

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

所求解集為:

[ [7],

[2,2,3]

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

所求解集為:

[ [2,2,2,2],

[2,3,3],

[3,5]

]

遞迴結束條件為target小於等於0或陣列用完

每次可以選擇使用當前元素dfs(target - candidates[i], combine, i)或不適用當前元素dfs(target, combine, i + 1)

注意元素可以重複使用

時間複雜度o(\(s\)),s為所有可行解長度之和

空間複雜度o(\(target\)),取決於遞迴的棧深度

class solution 

/***

* @param candidates 目標陣列

* @param target 剩餘目標數

* @param ans 最終結果列表

* @param combine 已組合列表

* @param i 當前元素下標

*/private void dfs(int candidates, int target, list> ans, listcombine, int i)

// 使用當前元素

if(target - candidates[i] >= 0)

// 跳過當前元素

dfs(candidates, target, ans, combine, i + 1);

}}//class test;

// system.out.println(test.combinationsum(candidates, 7));

// }

//}

leetcode 39 組合總和

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

LeetCode39 組合總和

排序剪枝後效率更高 class solution 難點是如何去除重複的組合 每次i從0開始搜尋 去重前 2 2 2 2 2 3 3 3 2 3 3 3 2 3 5 5 3 每次 i 從index開始搜尋 去重後 2 2 2 2 2 3 3 3 5 優化前 4ms 優化後 排序 剪枝 2ms priv...

leetcode 39 組合總數(回溯)

給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明當我看到這道題目的時候,當我看到要得到所有結果的組合,我二話沒說,立馬開始寫 了,一下是我...