leetcode 39 Combination Sum (回溯法)
来源:互联网 发布:淘客营销软件 编辑:程序博客网 时间:2024/04/30 13:20
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList<>(); List<Integer> recur = new ArrayList<>(); helper(res,recur,target,candidates,0); return res; } public void helper( List<List<Integer>> res,List<Integer> recur,int target,int[] candidates,int start){ if(target == 0){ List<Integer> tmp = new ArrayList<>(recur); res.add(tmp); return ; } if(target<0){ return; } for(int i=start;i<candidates.length;i++){ recur.add(candidates[i]); helper(res,recur,target-candidates[i],candidates,i); recur.remove(recur.size()-1); } }}
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]]
Subscribe to see which companies asked this question.
这道题采用回溯法的思想。重点在于,此题中要求结果不能重复,比如有了[1,2,3]那就不能有[2,1,3]。只要数字一样就是一样的。这样在递归时候,需要让新的索引始终在之前索引之后,这样就能避免因为新索引在原先索引之前造成重复。
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList<>(); List<Integer> recur = new ArrayList<>(); helper(res,recur,target,candidates,0); return res; } public void helper( List<List<Integer>> res,List<Integer> recur,int target,int[] candidates,int start){ if(target == 0){ List<Integer> tmp = new ArrayList<>(recur); res.add(tmp); return ; } if(target<0){ return; } for(int i=start;i<candidates.length;i++){ recur.add(candidates[i]); helper(res,recur,target-candidates[i],candidates,i); recur.remove(recur.size()-1); } }}
0 0
- leetcode 39 Combination Sum (回溯法)
- [leetcode][回溯] Combination Sum
- [leetcode] 回溯法 Combination Sum 系列问题
- leetcode 216 Combination Sum II (回溯法)
- (回溯法)LeetCode#39. Combination Sum
- 回溯法(leetcode-Combination Sum)
- [leetcode][回溯] Combination Sum II
- [leetcode][回溯] Combination Sum III
- Leetcode|Combination Sum III[回溯]
- leetcode---Combination Sum III---回溯
- 回溯详解及其应用:Leetcode 39 combination sum
- (回溯法)LeetCode#40. Combination Sum II
- 39. Combination Sum-回溯法
- leetcode Combination Sum II回溯问题
- Leetcode|Combination Sum II[递归回溯]
- 【回溯】【leetcode题解】【M】【57】Combination Sum
- leetcode Combination Sum III-回溯|递归
- leetcode 40. Combination Sum II-回溯算法
- When You And I Were Young, Seven7
- 合并两个排序的链表(Java实现)
- LintCode 39 恢复旋转排序数组
- 关于java多线程
- 桥接模式
- leetcode 39 Combination Sum (回溯法)
- Series 和 DataFrame 中的sort_index 方法
- Deep Learning学习笔记(二)——BP反向传播算法及其在CNN中的计算
- 凡是过去,皆为序章,
- 微信小程序组件
- node.js搭建代理服务器实现跨域
- JSP内置对象
- Deeplab训练时候unexpected label
- 《Python实现DNS解析查询》