摘要:題目給定一個可能有重復數字的整數數組和一個目標數,找出中所有可以使數字和為的組合。中的每個數字在每個組合中只能使用一次,解集不能包含重復的組合。示例輸入輸出示例輸入輸出提示注意本題與主站題相同答案回溯法排序后去重
題目:
給定一個可能有重復數字的整數數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的每個數字在每個組合中只能使用一次,解集不能包含重復的組合。
示例 1:
輸入: candidates = [10,1,2,7,6,1,5], target = 8,
輸出:
[ [1,1,6], [1,2,5], [1,7], [2,6]]
示例 2:
輸入: candidates = [2,5,2,1,2], target = 5,
輸出:
[ [1,2,2], [5]]
提示:
1 <= candidates.length <= 100
1 <= candidates[i] <= 50
1 <= target <= 30
注意:本題與主站 40 題相同: https://leetcode-cn.com/problems/combination-sum-ii/
答案:
class Solution { List<List<Integer>> lists; public List<List<Integer>> combinationSum2(int[] candidates, int target) { //回溯法,排序后去重 Arrays.sort(candidates); lists = new ArrayList<>(); List<Integer> list = new ArrayList<>(); backTrace(list, candidates, target, 0); return lists; } public void backTrace(List<Integer> list, int[] candidates, int target, int index){ if(target == 0){ lists.add(new ArrayList<>(list)); return; } if(index >= candidates.length) return; if(target < 0 && candidates[index] > 0) return; for(int i = index; i < candidates.length; i++){ list.add(candidates[i]); backTrace(list, candidates, target - candidates[i], i + 1); while (i < candidates.length - 1 && candidates[i] == candidates[i + 1]) { i++; } list.remove(list.size() - 1); } }}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123185.html
摘要:遍歷路徑,找到所有可以到達終點節點的路徑就是結果。提示中說保證輸入為有向無環圖,所以我們可以認為節點間一定有著某種排列的順序,從頭到尾怎樣可以有最多的路徑呢,那就是在保證沒有環路的情況下,所有節點都盡可能多的連接著其他節點。 ...
閱讀 1124·2021-11-19 09:40
閱讀 974·2021-11-12 10:36
閱讀 1267·2021-09-22 16:04
閱讀 3111·2021-09-09 11:39
閱讀 1269·2019-08-30 10:51
閱讀 1888·2019-08-30 10:48
閱讀 1227·2019-08-29 16:30
閱讀 471·2019-08-29 12:37