Leetcode -- Combination Sum
来源:互联网 发布:淘宝网副总裁 编辑:程序博客网 时间:2024/06/11 14:10
问题链接:https://oj.leetcode.com/problems/combination-sum/
问题描述: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,7 and target 7,
A solution set is:
[7]
[2, 2, 3]
问题API: public List<List<Integer>> combinationSum(int[] candidates, int target)
问题分析:
这题和Combination没啥不同,就是用一个buf保留每一层的数字,然后往下递归。只是每一位的数字都可以取无限次,所以可以在本地无限循环,然后再向下一层进行循环。另外,由于解集里的数字要顺序表示。所以最开始的数组就要sort一次。Arrays.sort()
public List<List<Integer>> combinationSum(int[] candidates, int target) { LinkedList<List<Integer>> res = new LinkedList<List<Integer>>(); Arrays.sort(candidates); int size = target / candidates[0]; if(size == 0) return res; int[] tmpres = new int[size + 1]; combination(candidates, tmpres, target, 0, 0, res); return res; } public void combination(int[] candidates, int[] tmpres, int target, int curpos, int curlevel, List<List<Integer>> res){ if(target == 0){ LinkedList<Integer> curres = new LinkedList<Integer>(); for(int i = 0; i < curpos; i++){ curres.add(tmpres[i]); } res.add(curres); }else if(target < 0 || curlevel == candidates.length){ return; }else{ for(int i = 0; target - candidates[curlevel] * i >= 0; i++){ if(i != 0){ tmpres[curpos + i - 1] = candidates[curlevel]; } combination(candidates, tmpres, target - i * candidates[curlevel], curpos + i, curlevel + 1, res); } } }
- [LeetCode] Combination Sum、Combination Sum II
- 【LeetCode】Combination Sum && Combination Sum II
- leetcode之Combination Sum && Combination Sum II
- leetcode Combination Sum &Combination Sum II
- leetcode-combination sum and combination sum II
- Leetcode:Combination Sum与Combination Sum II
- leetcode Combination Sum VS Combination Sum II
- [Leetcode]Combination Sum &&Combination Sum II
- LeetCode Combination Sum & Combination Sum II
- leetcode | Combination Sum & Combination Sum 2
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- [LeetCode]Combination Sum
- [LeetCode]Combination Sum II
- LeetCode Combination Sum
- LeetCode Combination Sum II
- B. Anton and currency you all know
- slf4j 是什么?
- 【010】高级强制类型转换
- js中创建对象是,工厂方式与构造函数方式中this的区别
- Android 屏幕适配
- Leetcode -- Combination Sum
- HTML状态码大全(301,404,500等)
- soot之Eclipse插件
- 大型网站架构改进历程:存储的瓶颈(中)
- iphone开发之深入浅出(2) - ARC 之@property使用
- c/c++ error:在GetAdaptersInfo循环中使用strcat时,忘记清空strcat导致 内存溢出 异常
- Java之美[从菜鸟到高手演变]之设计模式二
- 百度地图画多边形并保存位置
- spring mvc json ajax jquery