Leetcode #40. Combination Sum II 组合求和2 解题报告
来源:互联网 发布:林姗姗淘宝店 编辑:程序博客网 时间:2024/05/18 03:51
1 解题思想
这道题是昨天的升级版,先看看这个
Leetcode #39. Combination Sum 组合求和 解题报告
这道题的改变就是每个位置的数只能用一次了,但是如果本身就给了多个的话就无所谓。
基本方法一样,关键是对于重复的那里处理:
请看我代码里面的这一条
关键在于这部防止重复,规则就是排序后,如果当前位置i的数字和i-1的一样,那么必须要i用过后,i-1才能用,不然必须跳过,所有都是
2 原题
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.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
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]
3 AC解
public class Solution { List<List<Integer>> result; boolean flag[]; int candidates[]; int target; //递归寻找位置 public void find(int index,int tmp){ if(tmp==target){ //输出结果 List<Integer> list=new ArrayList<Integer>(); for(int i=0;i<=index;i++){ if(flag[i]){ list.add(candidates[i]); } } result.add(list); } else{ for(int i=index+1;i<candidates.length;i++){ //关键在于这部防止重复,规则就是排序后,如果当前位置i的数字和i-1的一样,那么必须要i用过后,i-1才能用,不然必须跳过,所有都是 if(i>0 && candidates[i]==candidates[i-1] && flag[i-1]==false) continue; if(tmp+candidates[i]<=target){ //对于满足条件的前进 flag[i]=true; find(i,tmp+candidates[i]); flag[i]=false; } else{ break; } } } } public List<List<Integer>> combinationSum2(int[] candidates, int target) { result = new ArrayList<List<Integer>>(); Arrays.sort(candidates); flag = new boolean[candidates.length]; this.candidates=candidates; this.target=target; find(-1,0); return result; }}
- Leetcode #40. Combination Sum II 组合求和2 解题报告
- Leetcode #39. Combination Sum 组合求和 解题报告
- [leetcode] 40. Combination Sum II 解题报告
- leetcode 40. Combination Sum II 解题报告
- [Leetcode] 40. Combination Sum II 解题报告
- LeetCode 40. Combination Sum II(组合求和)
- 【LeetCode】Combination Sum I & II 解题报告
- LeetCode解题报告--Combination Sum II
- 【LeetCode】40.Combination Sum II(Medium)解题报告
- leetcode解题之 Combination Sum java 版(组合求和)
- leetCode 40.Combination Sum II(组合总和II) 解题思路和方法
- leetcode Combination Sum解题报告
- LeetCode解题报告--Combination Sum
- Leetcode 216 Combination Sum III 组合求和
- LeetCode 39. Combination Sum(组合求和)
- leetcode解题之 Combination Sum III java 版(组合求和III)
- LeetCode Combination Sum 和 Combination Sum II 解题心得
- LeetCode-Combination Sum III-解题报告
- 自定义控件(25)---自定义控件之组合控件
- hdu1495
- Deibian8安装微软雅黑字体
- div中嵌套php代码
- [线程]——死锁
- Leetcode #40. Combination Sum II 组合求和2 解题报告
- android 用java反射修改Activity的组件view的布局或者属性
- 数据结构-队列
- 如何阅读一本书(1)
- 整理了一份React-Native学习指南
- spring mvc ${}获取不到变量
- UBI系统原理分析
- C++ Primer 5th - 2.1 基础内建类型
- C/C++拷贝文件的方法