Java經典算法:組合之和

給定一組候選數(C)和目標數(T),在C中找到所有唯一組合,其中候選數之和等於T。可以從C無限次中選擇相同的重複數。
注意:所有數字(包括目標)將爲正整數。組合中的元素(a1,a2,…,ak)必須按降序排列。(即a1 <= a2 <= … <= ak)。解決方案集不得包含重複的組合。例如,給定候選集2、3、6、7和目標7,解決方案集爲:
[7]
[2,2,3]
Java解決方案
此問題的第一印象應該是深度優先搜索(DFS)。爲了解決DFS問題,遞歸是一種正常的實現。
以下示例顯示了DFS的工作方式:
public List<List> combinationSum(int[] candidates, int target) {
List<List> result = new ArrayList<>();
List temp = new ArrayList<>();
helper(candidates, 0, target, 0, temp, result);
return result;}
private void helper(int[] candidates, int start, int target, int sum,
List list, List<List> result){
if(sum>target){
return;
}

if(sum==target){
    result.add(new ArrayList<>(list));
    return;
}

for(int i=start; i<candidates.length; i++){
    list.add(candidates[i]);
    helper(candidates, i, target, sum+candidates[i], list, result);
    list.remove(list.size()-1);
}}

最後,開發這麼多年我也總結了一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章