【LeetCode】C# 39、Combination Sum
来源:互联网 发布:痘痘变硬了怎么办知乎 编辑:程序博客网 时间:2024/06/07 20:07
Given a set of candidate numbers (C) (without duplicates) 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.
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]
]
给定数组和目标值,数组中的个别值拼凑求和,把所有符合条件的组合返回。
思路:DP
public class Solution { public List<List<int>> CombinationSum(int[] candidates, int target) { Array.Sort(candidates); List<List<int>> result = new List<List<int>>(); getResult(result, new List<int>(), candidates, target, 0); return result; } private void getResult(List<List<int>> result, List<int> cur, int[] candidates, int target, int start){ if(target > 0){ for(int i = start; i < candidates.Length && target >= candidates[i]; i++){ cur.Add(candidates[i]); getResult(result, cur, candidates, target - candidates[i], i); cur.RemoveAt(cur.Count() - 1); } } else if(target == 0 ){ result.Add(new List<int>(cur)); } }}
思路2:动态规划。
参考自
http://www.cnblogs.com/etcow/archive/2012/07/03/2575443.html
public static List<List<int>> CominationSum(int[] candidates, int target) { Dictionary<int, List<List<int>>> map = new Dictionary<int, List<List<int>>>(); //Array.Sort(candidates); for (int cur_sum = 1; cur_sum <= target; cur_sum++) { for (int cand_index = 0; cand_index < candidates.Length; cand_index++) { if (cur_sum < candidates[cand_index]) continue; if (cur_sum == candidates[cand_index]) { List<int> templist = new List<int> { candidates[cand_index] }; if (map.ContainsKey(cur_sum)) map[cur_sum].Add(templist); else { List<List<int>> templistlist = new List<List<int>>(); templistlist.Add(templist); map.Add(cur_sum, templistlist); } continue; } int pre_cur_sum = cur_sum - candidates[cand_index]; if (!map.ContainsKey(pre_cur_sum)) continue; else { int pre_cur_sum_size = map[pre_cur_sum].Count; for (int i = 0; i < pre_cur_sum_size; i++) { if (map[pre_cur_sum][i][map[pre_cur_sum][i].Count - 1] <= candidates[cand_index]) { List<int> templist = new List<int>(map[pre_cur_sum][i]); templist.Add(candidates[cand_index]); if (map.ContainsKey(cur_sum)) map[cur_sum].Add(templist); else { List<List<int>> templistlist = new List<List<int>>(); templistlist.Add(templist); map.Add(cur_sum, templistlist); } } } } } } return map[target]; }
这两个思路C#解都能在VS跑出来,但LeetCode都没AC,因为LeetCode不接受返回格式为List<List<int>>
只能为IList<IList<int>>
,我不知道怎么初始化,烦请知道怎么解决的朋友赐教。
阅读全文
0 0
- 【LeetCode】C# 39、Combination Sum
- LeetCode 39: Combination Sum
- LeetCode(39) Combination Sum
- [leetcode 39] Combination Sum
- leetcode 39: Combination Sum
- leetcode || 39、Combination Sum
- leetcode 39 : Combination Sum
- leetcode 39: Combination Sum
- Leetcode #39 Combination Sum
- LeetCode(39) Combination Sum
- LeetCode-39 Combination Sum
- leetcode 39:Combination Sum
- LeetCode 39: Combination Sum
- Leetcode 39 - Combination Sum
- 【leetcode】【39】Combination Sum
- LeetCode 39 - Combination Sum
- LeetCode(39)-Combination Sum
- Leetcode 39 Combination Sum
- 2017年10月11日一点点人生感悟~人一定要靠自己
- 比较总结线性表的几种主要存储结果
- hihocoder 1014 Trie树
- hdu 5521 Meeting(优先队列+dijkstra)(建图思想)
- 手动部署 使用 bluestore 后端的 osd (L版)
- 【LeetCode】C# 39、Combination Sum
- CodeForces 868B Race Against Time
- Bootstrap 控制移动端和网页端的元素隐藏和显示
- node vue 环境搭建
- 使用js跨域获取数据的方法
- nkoj 1313(noip2007)树网的核 与 nkoj 2650(SDOI2011)消防
- 在屏幕上输出星号组成的菱形图案。
- 【OpenJudge 9278】旅行
- RSA 加密算法备忘