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 39.Combination Sum(组合总和) 解题思路和方法

Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique com...
  • xygy8860
  • xygy8860
  • 2015年07月09日 22:33
  • 1149

回溯详解及其应用:Leetcode 39 combination sum

原理 初入门 基本定义和概念 举栗子 编程思路 实践 生成符合规范的括号 combination sum n queen原理初入门有时会遇到这样一类题目,它的问题可以分解,但是又不能得出明确的动态规划...
  • c602273091
  • c602273091
  • 2017年01月31日 16:47
  • 346

39. Combination Sum 求目标和的元素集合

39. Combination Sum 求目标和的元素集合
  • u014274339
  • u014274339
  • 2017年03月20日 08:04
  • 217

【LeetCode-面试算法经典-Java实现】【216-Combination Sum III (组合数的和)】

【216-Combination Sum III (组合数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月28日 06:58
  • 3545

【回溯】【leetcode题解】【M】【57】Combination Sum

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher...
  • sscssz
  • sscssz
  • 2015年12月15日 18:37
  • 200

leetcode 39. Combination Sum DFS深度优先搜索 + 按照index(包含)做递归

Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique c...
  • JackZhang_123
  • JackZhang_123
  • 2017年09月02日 18:42
  • 110

LeetCode OJ算法题(三十八):Combination Sum

题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations ...
  • op_yu
  • op_yu
  • 2014年07月25日 12:10
  • 376

[CS@Nets][编译原理]一个栈式计算机的加法语言编译器

一个小型的从表达式语言Sum到栈计算机Stack的编译器,
  • MengCHRDI
  • MengCHRDI
  • 2015年05月18日 20:39
  • 980

LeetCode第39题之Combination Sum(两种方法)

思路:两种方法都是利用递归回溯,第二方法在第一种方法的基础上对原始数据先进行排序,这样可以剪枝,加快计算速度。第一种方法在LeetCode上测试运行的时间是24ms,第二种方法运行时间为16ms。 ...
  • u011954296
  • u011954296
  • 2016年06月18日 12:27
  • 181

每日算法之三十一:Combination Sum

给定一个整数序列,求解一个子序列,子序列之和等于给定目标值。子序列满足以下条件: 1)子序列是有序的 2)子序列的元素个数不限,可以是给定元素的重复元素。 3)结果中的子序列是唯一的 原题描述...
  • yapian8
  • yapian8
  • 2014年06月08日 22:00
  • 680
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目54:39. Combination Sum
举报原因:
原因补充:

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