Middle-题目54:39. Combination Sum

原创 2016年05月31日 16:25:18

题目原文:
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]
题目大意:
给出一系列候选数,及一个目标数,计算目标数拆分成候选数之和(允许重复)的所有拆分方式。
题目分析:
贪心+回溯。使用backtrack(List<List<Integer>> list, List<Integer> sublist, int[] candidates, int target, int startPos)维护搜索过程,参数意义不必过多介绍,每次加入一个候选数,就从当前候选数开始往下搜。
源码:(language:java)

public class Solution {
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        backtrack(list, new ArrayList<Integer>(), candidates, target, 0);
        return list;
    }
    private void backtrack(List<List<Integer>> list, List<Integer> sublist, int[] candidates, int target, int startPos) {
        if(target == 0) {
            list.add(new ArrayList<Integer>(sublist));
        }
        else {
            for(int i = startPos; i < candidates.length; i++) {
                int temp = candidates[i];
                if(temp <= target) {
                    sublist.add(temp);
                    backtrack(list,sublist,candidates,target-temp,i);
                    sublist.remove(sublist.size()-1);
                }
            }
        }
    }
}

成绩:
6ms,beats 64.44%,众数5ms,24.50%

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

相关文章推荐

leetcode_middle_35_377. Combination Sum IV

题意: 给定一个不重复的正整数数组和一个正整数,找出数组的数相加等于这个正整数的可能组合数。(组合中的数字可以重复,可以不必使用所有数组的数,不同顺序各算一种) 分析: 我们要得出之和的可能数,就是要...
  • pusude
  • pusude
  • 2017年02月10日 15:53
  • 59

leetcode_middle_25_216. Combination Sum III

题意: 给两个数n,k,找出所有n个各不相同的数的和是k的组合。 分析: 其实关键就是搜索遍历,怎么遍历呢?可以这样: 1,2,3    1,2,4    1,2,5  ...   1,2...
  • pusude
  • pusude
  • 2017年02月07日 14:44
  • 80

LeetCode 39:Combination Sum

每一次向下搜索时,起始位置都和上一次相同,因为可以取相同元素不止一次,即每次向下传入的index For循环每次从index开始,避免返回到之前的元素 DFS搜索 如果sum>target 则r...

Leetcode 39. Combination Sum

Leetcode 39.COmbination Sum
  • Earl211
  • Earl211
  • 2017年06月22日 21:46
  • 81

[LeetCode]39.Combination Sum

【题目】 Given a set of candidate numbers (C) and a target number (T), find all unique combinations in...

LeetCode 39. Combination Sum 解题博客

LeetCode 39. Combination Sum 解题报告题目描述Given a set of candidate numbers (C) (without duplicates) and a...

(Leetcode)39&40. Combination Sum--Using Backtracking

Problem39. Combination Sum Given a set of candidate numbers (C) and a target number (T), find all ...

LeetCode - 39. Combination Sum

这道题要求我们找出所有的可行解,一般这种问题我们可以考虑使用backtracking或DFS,通常情况下,我们将回溯法与DFS同等看待,可以用一个等式表示它们的关系:回溯法 = DFS + 剪枝。所以...

leetcode39&40_Combination Sum& CombinationSumII

一.问题描述 Given a set of candidate numbers (C) and a target number (T), find all unique combinations ...

39. Combination Sum

简单的回溯法(递归实现)。 比如对于数组3,2,6,7,target = 7,对数组排序得到[2,3,6,7] 1、第1个数字选取2, 那么接下来就是解决从数组[2,3,6,7]选择数字且ta...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目54:39. Combination Sum
举报原因:
原因补充:

(最多只允许输入30个字)