LeetCode—数组(3)
来源:互联网 发布:五道口金融博士知乎 编辑:程序博客网 时间:2024/05/22 02:23
1.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]
public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res=new ArrayList<List<Integer>>(); if(candidates==null||candidates.length==0) return res; Arrays.sort(candidates); combinationSum(candidates, target,0,new ArrayList<Integer>(),res); return res; } private static void combinationSum(int[] candidates, int target, int start, ArrayList<Integer> list,List<List<Integer>> res) {if(target==0){res.add(list);return;}for(int i=start;i<candidates.length;i++){if(target-candidates[i]>=0){ArrayList<Integer> tmp=(ArrayList<Integer>)list.clone();int tmp_target=target-candidates[i];tmp.add(candidates[i]);combinationSum(candidates, tmp_target, i, tmp, res);}}}</span>
2.
Combination Sum II
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]
public List<List<Integer>> combinationSum2(int[] candidates, int target) { List<List<Integer>> res=new ArrayList<List<Integer>>(); if(candidates==null||candidates.length==0) return res; Arrays.sort(candidates); combinationSum2(candidates,target,0,new ArrayList<Integer>(),res); return res; }private static void combinationSum2(int[] candidates, int target, int start, ArrayList<Integer> arrayList,List<List<Integer>> res) {if(target==0){res.add(arrayList);return;}for(int i=start;i<candidates.length;i++){if (i > start && candidates[i] == candidates[i-1]) continue;if(target-candidates[i]>=0){ArrayList<Integer> tmp=(ArrayList<Integer>)arrayList.clone();int tmp_target=target-candidates[i];tmp.add(candidates[i]);combinationSum2(candidates, tmp_target, i+1, tmp, res);}}}</span>
Combination Sum III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
public List<List<Integer>> combinationSum3(int k, int n) { List<List<Integer>> res = new ArrayList<>(); Deque<Integer> tmp = new ArrayDeque<>(); if (n == 0 || k == 0 || n / k > 9) { return res; } helper(res, tmp, 1, k, n); return res; } private void helper(List<List<Integer>> res, Deque<Integer> tmp, int start, int k, int n) { if (0 == n && k == 0) { res.add(new ArrayList<>(tmp)); return; } for (int i = start; i <= 9; i++) { tmp.addLast(i); helper(res, tmp, i + 1, k - 1, n - i); tmp.removeLast(); } }</span>
- LeetCode—数组(3)
- LeetCode—数组(1)
- LeetCode—数组(2)
- leetcode数组(一)
- [leetcode] 【数组】15. 3Sum
- LeetCode—删除数组元素
- 【LeetCode】数组系列(间隔)
- 【LeetCode】数组系列(排序)
- 继续做leetcode上数组题3
- [leetcode] 16 3Sum Closest(数组)
- [leetcode] 【数组】16. 3Sum Closest
- [LeetCode]—Subsets 求数组子集
- LeetCode—寻找两个有序数组中值
- [leetcode]Plus One(int数组)
- (数组)leetcode 283:Move Zeroes
- (数组)leetcode 88:Merge Sorted Array
- LeetCode 189 Rotate Array(旋转数组)
- LeetCode 189 Rotate Array(旋转数组)
- IO流
- hihoCoder_#1062_最近公共祖先·一
- 卡特兰数
- [LeetCode][Java] Clone Graph
- C中CONST的使用
- LeetCode—数组(3)
- 创建音乐盒播放器
- pthread 线程库编程 一:线程与互斥锁 mutex_lock
- [UIApplication sharedApplication].keyWindow 添加视图无效,解决方案。
- 字符串的最长公共子序列问题
- 软件工程—思考项目开发那些事(一)
- cout<<endl 本质解析
- C语言编程入门——程序练习(下)
- 数据库优化 in 软件生命周期的不同阶段