LeetCode40
来源:互联网 发布:申请淘宝达人网址 编辑:程序博客网 时间:2024/06/10 22:39
Combination Sum II
问题表示
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:
1. All numbers (including target) will be positive integers.
2. The solution set must not contain duplicate combinations.
3. 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]]
这道题与上一道题也就是Combination Sum是类似的题目,不过在上一道题中,元素本身不重复,但是可以重复使用,在第二道题中,元素本身会重复,但是不能重复使用。所以程序结构基本是相似的。比较重要的一个点就是,如果去重复。
我直接使用了Set去存储符合条件的解,最后在直接转化为List,这只是比较偷懒的办法,可以在每次添加的时候都进行判断。在这里就不表述。
代码实现
public class Solution40 { Set<List<Integer>> result = new HashSet<>(); //这里与上一道题不同的是使用Set来去除重复的解, // Map<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> combinationSum2(int[] candidates, int target) { //首先对数组进行排序 Arrays.sort(candidates); help(candidates, 0, new ArrayList<>(), target); //将Set转化为List List<List<Integer>> r = new ArrayList<>(result); return r; } public void help(int[] candidates, int i, List<Integer> list, int target) { if (target == 0) { List<Integer> integerList = new ArrayList<>(list); result.add(integerList); } for (int j = i; j < candidates.length && candidates[j] <= target; j++) { list.add(candidates[j]); //这里有所不同的是传入的是j+1,因为每个元素不能重复的使用 help(candidates, j + 1, list, target - candidates[j]); list.remove(list.size() - 1); } }}
LeeCode学习系列Gtihub,持续更新。
本题的Github链接
https://github.com/yanqinghe/leetcode/
阅读全文
0 0
- LeetCode40
- [LeetCode40]Combinations Sum II
- LeetCode40:Combination Sum II
- Leetcode40 Combination Sum II
- leetcode40 Combination Sum II
- LeetCode40. Combination Sum II
- LeetCode40:Combination Sum II
- leetcode40. Combination Sum II
- leetcode40. Combination Sum II
- LeetCode40 Combination Sum II
- LeetCode40. Combination Sum II
- [LeetCode40]Largest Rectangle in Histogram
- Leetcode40: Remove Linked List Elements
- LeetCode40 Combination Sum II 解析
- LeetCode40——Combination Sum II
- [LeetCode39]Combination Sum 和[LeetCode40]Combination Sum II
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- javascript随机生成一定位数的密码
- 网络应用进程通信
- 第三周 4 顺序表 应用(2)
- cocos2dx-JniHelper 使用,在c++层面调用java层接口
- LeetCode40
- 【Ubuntu】Ubuntu下搜狗输入法打不出中文
- 生成对抗网络(GAN)简单梳理
- 2017 ACM/ICPC Asia Regional Shenyang Online 1004 array array array
- S5PV210的定时器
- 二叉树的,前/中/后序的遍历( 递归,非递归),层序遍历,以及各种应用功能
- uva 10603 三个杯子倒水问题 BFS搜索
- 2017 ACM/ICPC Asia Regional Shenyang Online 1005 number number number
- 大内核锁、读写锁、大读者锁、RCU和顺序锁