LeetCode 39 Combination Sum
2016-05-16 11:49
399 查看
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:
思路参考下图:
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]
思路参考下图:
public List<List<Integer>> combinationSum(int[] candidates, int target) { Arrays.sort(candidates); List<List<Integer>> result = new LinkedList<List<Integer>>(); List<Integer> tmp = new ArrayList<Integer>(); dfs(0, candidates, target, tmp, result); return result; } private void dfs(int begin, int[] candidates, int rest, List<Integer> tmp, List<List<Integer>> result) { if (rest == 0) result.add(new ArrayList<Integer>(tmp));//tmp是变动的,所以此处需要new一个 /*分别从candidates[i]开始往下深搜*/ for (int i = begin; i < candidates.length && candidates[i] <= rest; i++) { tmp.add(candidates[i]); dfs(i, candidates, rest - candidates[i], tmp, result);//搜索下个数字 tmp.remove(tmp.size() - 1);//回溯 } }
相关文章推荐
- Linux RAID
- 一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?
- Linux shell “if else” 与 条件判定
- android api 中文 (73)—— AdapterView
- 定制WinCE标准界面的一种方法
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Linux文件系统管理
- PHP面向对象笔记
- 关于this指向问题
- Android中获取正在运行的应用程序-----ActivityManager.RunningAppProcessInfo类详解
- hive安装配置及遇到的问题解决
- Matlab图像处理常用函数归类总结
- WPF: RenderTransform特效
- 在Mac上搭建React Native开发环境(iOS && Android)
- Linux磁盘管理
- 排序算法:冒泡排序
- Linux基础命令
- Android studio适配6.0的一些小问题
- C++作业5
- python字符串常用操作方法