leetcode 39-Combination Sum
来源:互联网 发布:html引导页源码 编辑:程序博客网 时间:2024/06/07 05:22
和40题非常相似
自己写的代码 非常耗时间 (版本一)
public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> list = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); backtrack(list, temp, candidates, target, 0, 0); return deduplicate(list); } private void backtrack(List<List<Integer>> list, List<Integer> temp, int[] candidates, int target, int index, int sum) { if (sum > target) return; if (sum == target) list.add(new ArrayList<Integer>(temp)); if (sum < target) { for (int i = 0; i < candidates.length; i++) { temp.add(candidates[i]); backtrack(list, temp, candidates, target, i + 1, sum + candidates[i]); temp.remove(temp.size() - 1); } } } private List<List<Integer>> deduplicate(List<List<Integer>> list) { list.forEach(l -> Collections.sort(l)); return list.stream().distinct().collect(Collectors.toList()); }
又写了一个,但是还有可以优化的地方
public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> list = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); backtrack(list, temp, candidates, target, 0, 0); return list; } private void backtrack(List<List<Integer>> list, List<Integer> temp, int[] candidates, int target, int index, int sum) { if (sum > target) return; if (sum == target) list.add(new ArrayList<Integer>(temp)); if (sum < target) { for (int i = index; i < candidates.length; i++) { temp.add(candidates[i]); backtrack(list, temp, candidates, target, i, sum + candidates[i]); temp.remove(temp.size() - 1); } } }
比如说,【2 3 6 7】 target = 7;
判断完 2222之后,2223,2226,2227就不需要在判断了。但是这个程序还进行了判断,就是说剪枝做的不好。前提是【2 3 6 7】按照升序排好了。
0 0
- 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
- leetcode 39 Combination Sum
- 20170423STL017_STL_hash容器
- 最大流(Dinic临接表)
- 1925: [Sdoi2010]地精部落
- iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewController
- Java编译环境在新版windows10中的设置
- leetcode 39-Combination Sum
- NINA项目里面已经加入架包“SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"”
- 利用Python进行深度学习的完整入门指南(附资源)
- Spark基础transformation操作实例(Scala版)
- 关于Android6.0运行时权限的总结(干货)。
- POJ 2342 (树dp)
- Go语言学习笔记 -- 包
- 程序员滴无奈生活记(二)
- 游戏数据分析-基本指标