【Combination Sum 】cpp
题目:
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]
代码:
class Solution {
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            vector<vector<int> > ret;
            vector<int> tmp;
            int sum = ;
            std::sort(candidates.begin(), candidates.end());
            Solution::dfs(ret, tmp, sum, candidates, , candidates.size()-, target);
            return ret;
    }
    static void dfs(
            vector<vector<int> >& ret,
            vector<int>& tmp,
            int &sum,
            vector<int>& candidates,
            int begin,
            int end,
            int target )
    {
            if ( sum>target ) return;
            if ( sum==target )
            {
                ret.push_back(tmp);
                return;
            }
            for ( int i=begin; i<=end; ++i )
            {
                if ( sum+candidates[i]<=target )
                {
                    sum += candidates[i];
                    tmp.push_back(candidates[i]);
                    Solution::dfs(ret, tmp, sum, candidates, i, end, target);
                    sum -= candidates[i];
                    tmp.pop_back();
                }
            }
    }
};
tips:
采用深搜模板:
1. 终止条件sum>target
2. 加入解集条件sum==target
3. 遍历当前层所有分支(如果满足sum+candidates[i]<target,则还可以再往上加candidates[i];注意,这里传入下一层的begin下标为i,因为要求元素可以无限多重复)
4. 由于传入下一层始终满足begin<=end,因此不要在终止条件中加入(begin>end)
=======================================
第二次过这道题,用dfs的思路,一次AC了。
class Solution {
public:
        vector<vector<int> > combinationSum(
            vector<int>& candidates,
            int target)
        {
            vector<vector<int> > ret;
            vector<int> tmp;
            sort(candidates.begin(), candidates.end());
            Solution::dfs(ret, tmp, candidates, , candidates.size()-, target);
            return ret;
        }
        static void dfs(
            vector<vector<int> >& ret,
            vector<int>& tmp,
            vector<int>& candidates,
            int begin,
            int end,
            int target
            )
        {
            if ( target< ) return;
            if ( target== )
            {
                ret.push_back(tmp);
                return;
            }
            for ( int i=begin; i<=end; ++i )
            {
                tmp.push_back(candidates[i]);
                Solution::dfs(ret, tmp, candidates, i, end, target-candidates[i]);
                tmp.pop_back();
            }
        }
};
【Combination Sum 】cpp的更多相关文章
- 【Path Sum】cpp
		题目: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ... 
- 【Two Sum】cpp
		题目: Given an array of integers, find two numbers such that they add up to a specific target number. ... 
- 【Combination Sum II 】cpp
		题目: Given a collection of candidate numbers (C) and a target number (T), find all unique combination ... 
- 【Binary Tree Maximum Path Sum】cpp
		题目: Given a binary tree, find the maximum path sum. The path may start and end at any node in the tr ... 
- 【Minimum Path Sum】cpp
		题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ... 
- 【二叉树的递归】03判断二叉树中有没有和为给定值的路径【Path Sum】
		++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树和一个和,判断这个树 ... 
- 【Add binary】cpp
		题目: Given two binary strings, return their sum (also a binary string). For example,a = "11" ... 
- hdu 4739【位运算】.cpp
		题意: 给出n个地雷所在位置,正好能够组成正方形的地雷就可以拿走..为了简化题目,只考虑平行于横轴的正方形.. 问最多可以拿走多少个正方形.. 思路: 先找出可以组成正方形的地雷组合cnt个.. 然后 ... 
- Hdu 4734 【数位DP】.cpp
		题意: 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目给出a,b,求出0~ ... 
随机推荐
- php编译安装过程中遇到问题
			编译安装PHP时遇到的问题 问题1: configure: error: xml2-config not found. Please check your libxml2 installation. ... 
- static int a
			static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的 详见:http://bbs.csdn.net/ ... 
- Redis集群维护、运营的相关命令与工具介绍
			Redis集群的搭建.维护.运营的相关命令与工具介绍 一.概述 此教程主要介绍redis集群的搭建(Linux),集群命令的使用,redis-trib.rb工具的使用,此工具是ruby语言写的,用于集 ... 
- Python开发第三篇
			函数 一.函数参数传值 形参:函数在定义的时候给定的参数 实参:函数在运行时赋给的参数: def func(i):#i为定义时的参数,为形参 pass func(name)#name为运行时的参数,为 ... 
- windows剪切板暂存
			其实最初是因为在项目中使用了html网页编辑器,通过ie的com组件和javascript通讯完成一些事情,其中有一个功能是插入表格,我们原本使用的range.pasteHTML(HTMLstr);根 ... 
- IOS  设置子控件的frame(layoutSubviews and awakeFromNib)
			如果控件是通过xib或者storyboard创建出来的就会调用该方法 - (void)awakeFromNib :该方法只会调用一次 // 如果控件是通过xib或者storyboard创建出来的就 ... 
- bazel安装
			https://blog.csdn.net/cxq234843654/article/details/70861155 sudo apt-get install openjdk-8-jdk echo ... 
- 欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响
			项目中出现了二分类数据不平横问题,研究总结下对于类别不平横问题的处理经验: 为什么类别不平横会影响模型的输出? 许多模型的输出类别是基于阈值的,例如逻辑回归中小于0.5的为反例,大于则为正例.在数据不 ... 
- HTML 5.1 的 14 个新特性(含使用案例)
			HTML5 属于万维网联盟 (W3C), 这个组织为整个网络界提供了标准,如此形成的协议可在全世界通行.在 2016 年 11 月, W3C 对长期行使的 HTML 5 标准进行了更新,它是2年内的第 ... 
- java面试题:如果一串字符如"aaaabbc中国1512"要分别统计英文字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。
			package com.swift; public class TotalNumber_String { public static void main(String[] args) { /* * 如 ... 
