Combination Sum

原创 2015年11月19日 15:06:52

题目名称
Combination Sum—LeetCode链接

描述
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] 

分析
  还是用到回溯法,这里允许元素重复,约束函数就是当前可能解的sum等于target就行。

C++代码

/************************************************* 
Copyright: 武汉大学计算机学院B507 
Author: Ryan
Date: 2015-11-19 
Description: 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.
**************************************************/ 
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

//函数申明 
void comb(vector<int> candidates, int index, int sum, int target, vector<vector<int> > &res, vector<int> &path);

vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
    sort(candidates.begin(),candidates.end());
    vector<vector<int> > res;
    vector<int> path;
    comb(candidates,0,0,target,res,path);
    return res;
}
/* 回溯法求所有解,path为一个可行解,res存储所有解向量 
 * 约束函数为sum==target 
 * 允许元素重复 
 */ 
void comb(vector<int> candidates, int index, int sum, int target, vector<vector<int> > &res, vector<int> &path)
    {
        if(sum>target)
            return;
        if(sum==target){
            res.push_back(path);
            return;
        }
        for(int i= index; i<candidates.size();i++)
        {
            path.push_back(candidates[i]);
            comb(candidates,i,sum+candidates[i],target,res,path);
            path.pop_back();
        }
}


//测试用例 
int main() {
    int a[] = {2,3,6,7};
    vector<int> nums(a,a+4);    
    int target = 7;
    vector<vector<int> > res = combinationSum(nums,target);
    cout<<"["<<endl;
    for(int i=0;i<res.size();i++) {
        cout<<" [";
        for(int j=0;j<res[i].size();j++) {
            cout<<" "<<res[i][j];
        }
        cout<<" ]"<<endl;
    }
    cout<<"]"<<endl;
    return 0;
}

总结
  运行结果如下图:

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。如果转载一定要通知博主哦~~

【LeetCode】Combination Sum I & II 解题报告

【Combination Sum I】 Given a set of candidate numbers (C) and a target number (T), find all unique ...
  • ljiabin
  • ljiabin
  • 2014年12月16日 11:06
  • 6462

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
  • 1243

[LeetCode39]Combination Sum

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher...
  • sbitswc
  • sbitswc
  • 2014年06月17日 04:15
  • 6143

Combination Sum -- LeetCode

原题链接: http://oj.leetcode.com/problems/combination-sum/  这个题是一个NP问题,方法仍然是N-Queens中介绍的套路。基本思路是先排好序,然后每...
  • linhuanmars
  • linhuanmars
  • 2014年03月10日 03:57
  • 20091

leetcode【39+40+216+377 Combination Sum 相关】【python】

39Combination Sum是说让我们在给定数组C中找到所有的组合,使得组合中数字的和是target值。并且组合里的数字可以重复,也就是不限制C中每一个数字的使用。 这明显是回溯啦,大家记得让...
  • u014251967
  • u014251967
  • 2016年12月13日 16:38
  • 330

leetcode-java-377. Combination Sum IV

/* Given an integer array with all positive numbers and no duplicates, find the number of possible c...
  • github_34514750
  • github_34514750
  • 2016年08月20日 11:46
  • 538

Combination Sum算法详解

Combination Sum I: 算法题目:Given a set of candidate numbers (C) and a target number (T), find all uniq...
  • wsb0910
  • wsb0910
  • 2015年06月25日 17:55
  • 1013

377. Combination Sum IV-动态规划

Given an integer array with all positive numbers and no duplicates, find the number of possible comb...
  • u011567017
  • u011567017
  • 2016年09月22日 19:54
  • 598

[leetcode]40. Combination Sum II ,python实现【medium难度】

Combination sum 2.python实现
  • zl87758539
  • zl87758539
  • 2016年06月16日 17:37
  • 699

[leetcode] 377. Combination Sum IV 解题报告

题目链接: https://leetcode.com/problems/combination-sum-iv/ Given an integer array with all positiv...
  • qq508618087
  • qq508618087
  • 2016年07月29日 14:08
  • 4079
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Combination Sum
举报原因:
原因补充:

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