leetcode:Combination Sum 【Java】
2016-03-16 15:32
507 查看
一、问题描述
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where
the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
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
A solution set is:
二、问题分析
1、采用递归算法;
2、详见代码注释。
三、算法代码
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where
the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
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
2,3,6,7and target
7,
A solution set is:
[7]
[2, 2, 3]
二、问题分析
1、采用递归算法;
2、详见代码注释。
三、算法代码
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { Arrays.sort(candidates); ArrayList<Integer> cur = new ArrayList<Integer>(); List<List<Integer>> result = new ArrayList<List<Integer>>(); dfs(candidates, target, 0, cur, result); return result; } public void dfs(int[] candidates, int gap, int start, ArrayList<Integer> cur, List<List<Integer>> result){ if(gap == 0){ result.add(cur); return; } for(int i = start; i < candidates.length; i++){ if(gap < candidates[i]){ return; } cur.add(candidates[i]); //做两点说明 //1、因为元素可以重复,所以第三个参数是i而不是i + 1 //2、第四个参数是new ArrayList(cur),而不是cur,需要每次递归都创建一个保存中间结果的容器 dfs(candidates, gap - candidates[i], i, new ArrayList(cur), result); cur.remove(cur.size() - 1); } } }
相关文章推荐
- Java并发编程:synchronized
- eclipse An error has occurred,See error log for more details”错误的解决方法
- Java中的Map接口
- Java第二次实验要求
- java.util.current的主要方法简介
- 文章标题
- 《JAVA与模式》之装饰模式
- Java中如何从一个字符串中删除指定字符
- 解决JavaMail 发送邮件javax.mail.MessagingException: 501 Syntax: HELO hostname问题
- java未解惑
- Java关闭钩子
- JAVA_桥接模式
- Java中的异常处理机制的简单原理和应用以及连接池理解
- 使用 Java 执行器实现线程池
- java.lang.OutOfMemoryError: PermGen space
- 理解java接口和抽象类
- java在文章中找出关键词
- SpringMVC学习记录2
- [疯狂Java]多线程:进程和线程的概念
- Java的string类为什么是不可变的