40. Combination Sum II
来源:互联网 发布:淘宝房间吸顶灯 编辑:程序博客网 时间:2024/05/23 20:09
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.
Note:
- All numbers (including target) will be positive integers.
- The solution set must not contain duplicate combinations.
For example, given candidate set [10, 1, 2, 7, 6, 1, 5]
and target 8
,
A solution set is:
[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]
題意:將數組內的元素(元素可重複)組合出目標數,並打印出所有組合,但所有元素只能用一次
因為這題的數組是無序的,故需要先排序才能進行dfs(避免答案重複)
package LeetCode.Medium;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class CombinationSumII {/* * 因為這題的數組是無序的,故需要先排序才能進行dfs(避免答案重複) */ public List<List<Integer>> combinationSum2(int[] candidates, int target) { List<List<Integer>> result = new ArrayList<>(); if(candidates == null || candidates.length == 0) return result; //先排序 Arrays.sort(candidates); List<Integer> temp = new ArrayList<>(); //開始歷遍 helper(candidates, target, 0, 0, temp, result); return result; } void helper(int[] candidates, int target, int cur_val, int m, List<Integer> temp, List<List<Integer>> result) { //若目前結果大於target即可跳出 if(cur_val > target) return; if(cur_val == target) { //若結果已經有重複,則跳出 if(result.contains(temp)) return; result.add(new ArrayList<>(temp)); return; } for(int i = m; i < candidates.length; i ++) { temp.add(candidates[i]); //因為每個元素只能用一次,故要從m + 1開始走 //ex: 1 2 3 4 -> step1. 1, step2. 2, step3. 3, step4. 4 helper(candidates, target, cur_val + candidates[i], i + 1, temp, result); //dfs最後都要刪去最後一個元素 temp.remove(temp.size() - 1); } }}
阅读全文
1 0
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 暑假第2天总结
- CSS各种动画效果
- 市民卡中 PBOC3.0 的分析和目前使用的案例
- SSH配置:Hibernate的packagesToScan路径解析分析
- 在Linux中使用VS Code编译调试C++项目
- 40. Combination Sum II
- 集训第二天(2017/8/1):第一次做比赛
- ActivityManager: Warning: Activity not started, its current task has been brought to the front
- S2SH(struts2.2+spring3.1+hibernate3.3)框架简单搭建
- bzoj 1179 ATM tarjan缩点+spfa最短路
- js 中function 和Object
- POJ
- Linux命令学习过程笔记
- 正则表达式