【leetcode】【39】Combination Sum
2016-03-01 09:20
281 查看
一、问题描述
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wherethe 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]
二、问题分析
排列组合类的题目均属于backtracking,可以参考这里。三、Java AC代码
public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> list = new ArrayList<List<Integer>>();
List<Integer> item = new ArrayList<Integer>();
if (candidates==null || candidates.length==0 || target<=0) {
return list;
}
Arrays.sort(candidates);
dfsHelper(list, item, candidates, target, 0, 0);
return list;
}
public void dfsHelper(List<List<Integer>> list, List<Integer> item, int[] candidates, int target, int sum, int start){
if (sum==target) {
list.add(new ArrayList<Integer>(item));
return ;
}
if (sum>target) {
return ;
}
for (int i = start; i < candidates.length; i++) {
sum += candidates[i];
item.add(candidates[i]);
dfsHelper(list, item, candidates, target, sum, i);
sum -= candidates[i];
item.remove(item.size()-1);
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树