LeetCode題目:39. 組合總和 解題思路及Java實現
題目:
給定一個無重複元素的陣列 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]
]
提示:
1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每個元素都是獨一無二的。
1 <= target <= 500
解題思路:首先對陣列進行排序,然後通過回溯解決。回溯方法中傳入原陣列,目標值,及index,終止條件index等於陣列長度。
package top100;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Demo39 {
List<List<Integer>> results = new ArrayList<>();
List<Integer> result = new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates,int target){
//先將陣列進行排序
Arrays.sort(candidates);
getResults(candidates,target,0);
return results;
}
private void getResults(int[] candidates, int target, int index) {//傳一下下標,或者使用for迴圈
//沒找到符合條件的
if(index == candidates.length)
return;
//找到了 滿足條件
if(target == 0){
results.add(new ArrayList<>(result));//不能直接新增result到results result為引用,List裡的內容一直在改變
return;
}
//因為陣列經過排序 當target比當前下標對應的元素小,說明這條路徑找不到滿足條件的結果了
if (target<candidates[index])
return;
result.add(candidates[index]);
getResults(candidates,target-candidates[index],index);
result.remove(result.size()-1);
getResults(candidates,target,index+1);
}
}
相關文章
- 【刷題1】LeetCode 39. 組合總和 java基礎LeetCodeJava
- 題目:2.兩數相加 解題思路及Java實現Java
- LeetCode 39. 組合總和 40.組合總和II 131.分割回文串LeetCode
- leetcode:組合總和II(回溯java)LeetCodeJava
- Day 26| 39. 組合總和 、 40.組合總和II 、 131.分割回文串
- LeetCode39. 組合總和LeetCode
- JavaScript 中精度問題及解決思路彙總JavaScript
- LeetCode Animation 題目圖解彙總(持續更新中...)LeetCode圖解
- leetcode之兩數相加解題思路LeetCode
- LeetCode 解題彙總LeetCode
- LeetCode216.組合總和lllLeetCode
- LeetCode40.組合總和IILeetCode
- LeetCode-040-組合總和 IILeetCode
- LeetCode 連結串列解題彙總 Java版LeetCodeJava
- Java 題目集總結Java
- pta題目集6和題目集7題後總結
- 解題思路-leetcode第七十五題:顏色分類LeetCode
- dfs題目這樣去接題,秒殺leetcode題目LeetCode
- LeetCode演算法題-Number of Boomerangs(Java實現)LeetCode演算法OOMJava
- LeetCode 272 Closest Binary Tree Traversal II 解題思路LeetCode
- Java 題目集 4 - 6 總結Java
- [leetcode/lintcode 題解] 微軟 面試題:實現 Trie(字首樹)LeetCode微軟面試題
- 組合數輸出題解
- 回溯問題Python框架總結——排列組合問題Python框架
- java題目集4-6總結Java
- 【LeetCode】簡單題目集LeetCode
- 2020 KCTF秋季賽 | 第一題點評及解題思路
- 2020 KCTF秋季賽 | 第五題設計及解題思路
- 2020 KCTF秋季賽 | 第二題設計及解題思路
- 2020 KCTF秋季賽 | 第四題點評及解題思路
- 圖解Leetcode組合總和系列——回溯(剪枝優化)+動態規劃圖解LeetCode優化動態規劃
- 程式碼隨想錄演算法訓練營第23天 | 39.組合總和 40.組合總和Ⅱ 131.分割回文串演算法
- LeetCode演算法題-Next Greater Element I(Java實現)LeetCode演算法Java
- leetcode 831題解【C++/Java/Python】LeetCodeC++JavaPython
- 【LeetCode(Java) - 254】因子的組合LeetCodeJava
- 怎樣解題|題2.2.19:組合炸雞塊
- LeetCode題解(1512):好數對的數目(Python)LeetCodePython
- LeetCode題解(Offer19):正規表示式匹配的*和.實現(Python)LeetCodePython