Combination Sum
来源:互联网 发布:淘宝隐形眼镜可以买吗 编辑:程序博客网 时间:2024/05/17 09:07
1.题目
给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。
例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:
[7], [2,2,3]
给出候选数组[2,3,6,7]和目标数字7
返回 [[7],[2,2,3]]
2.算法
这道题也是问题,方法仍然是N-Queens中介绍的套路。基本思路是先排好序,然后每次递归中把剩下的元素一一加到结果集合中,并且把目标减去加入的元素,然后把剩下元素(包括当前加入的元素)放到下一层递归中解决子问题,应为允许元素重复,我们在递归下一个数的时候,还可以用当前数
public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) { // write your code here ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if (candidates == null || candidates.length == 0) { return res; } Arrays.sort(candidates); helper(candidates, 0, target, new ArrayList<Integer>(), res); return res; } public void helper(int[] candidates, int start, int target, ArrayList<Integer> item, ArrayList<ArrayList<Integer>> res) { if (target < 0) { return; } if (target == 0) { res.add(new ArrayList<Integer>(item)); return; } for (int i = start; i < candidates.length; i++) { if (i > 0 && candidates[i] == candidates[i - 1]) { continue; } item.add(candidates[i]); helper(candidates, i, target - candidates[i], item, res); //从第i个开始,可以重复数子 item.remove(item.size() - 1); } }
0 0
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Winform 窗体传值
- setlocal enabledelayedexpansion的作用
- Java工程通过JDBC连接数据库方法(SQL Server)
- 设计模式系列之十二状态模式
- CodeForces745B B - Hongcow Solves A Puzzle 暴力+判断
- Combination Sum
- Retrofit源码分析
- 3. Tomcat
- dos下 和 批处理中的 for 语句的基本用法
- iOS - Swift 自定义UITabBarController
- 文章标题
- 斐波那契数列-递归
- Windows下用breakpad抓取C++程序崩溃报告
- spring 注解