输入一个数组和target,选择任意个数的元素,求和为target的组合,每个元素可以选择多次

dfs,回溯,因为每个元素可以选择多次,所以向下搜索的时候从当前元素开始

同类题:http://blog.csdn.net/AC_0_summer/article/details/48293581

 1 class Solution {
 2 public:
 3     void dfs(vector<vector<int> > &v,vector<int> vv,vector<int> a,int i,int target,int sum){
 4         if(sum>target) return;
 5         if(sum==target){
 6             v.push_back(vv);
 7             return;
 8         }
 9        // vv.push_back(a[i]);
10         for(int j=i;j<a.size();j++){
11             if(sum+a[j]<=target){
12                 vv.push_back(a[j]);
13                 dfs(v,vv,a,j,target,sum+a[j]);
14                 vv.pop_back();
15             }
16         }
17     }
18     vector<vector<int> > combinationSum(vector<int>& candidates, int target) {
19         vector<vector<int> > v;
20         vector<int> vv;
21         int sum=0;
22         sort(candidates.begin(),candidates.end());
23         for(int i=0;i<candidates.size();i++){
24             if(candidates[i]<=target){
25                 vv.push_back(candidates[i]);
26                 dfs(v,vv,candidates,i,target,sum+candidates[i]);
27                 vv.pop_back();
28             }
29         }
30         if(v.size()==0) return v;
31         vector<vector<int> > ans;
32         ans.push_back(v[0]);
33         int k=0;
34         for(int i=1;i<v.size();i++){
35             if(ans[k].size()!=v[i].size()){
36                 ans.push_back(v[i]);
37                 k++;
38                 continue;
39             }
40             int ok=0;
41             for(int j=0;j<ans[k].size();j++){
42                 if(v[i][j]!=ans[k][j]){
43                     ok=1;break;
44                 }
45             }
46             if(ok){
47                 ans.push_back(v[i]);
48                 k++;
49             }
50         }
51         return ans;
52     }
53 };

转载于:https://www.cnblogs.com/0summer/p/5821507.html

leetcode-Combination Sum-39相关推荐

  1. LeetCode Combination Sum IV(动态规划)

    问题:给出一个数组nums和目标数target,问有多少组合形式 思路:用dp(i)表示目标数target的组合数.则有状态转移关系为dp(i)=sum(dp(i-nums[j])),其中i>= ...

  2. leetcode 39. Combination Sum | 39. 组合总和(Java)

    题目 https://leetcode.com/problems/combination-sum/ 题解 不是最优解法. 对于每一个位置 i 上 的元素,分为选或不选两种情况. 遍历每一个位置,计算强 ...

  3. 回溯法和DFS leetcode Combination Sum

    代码: 个人浅薄的认为DFS就是回溯法中的一种,一般想到用DFS我们脑中一般都有一颗解法树,然后去按照深度优先搜索去寻找解.而分支界限法则不算是回溯,无论其是采用队列形式的还是优先队列形式的分支界限法 ...

  4. LeetCode Combination Sum

    因为实验室项目好久没刷题了.从今天开始重新开始刷题. Given a set of candidate numbers (C) and a target number (T), find all un ...

  5. 【DFS】LeetCode 39. Combination Sum

    LeetCode 39. Combination Sum Solution1: DFS,这个套路要熟记啊! class Solution { public:vector<vector<in ...

  6. 【LeetCode】#39组合总和(Combination Sum)

    [LeetCode]#39组合总和(Combination Sum) 加粗样式 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数 ...

  7. 【动态规划】LeetCode 377. Combination Sum IV

    LeetCode 377. Combination Sum IV Solution1: 我的未能AC的答案 题目描述的和前几道题差不多,但实际上不能用DFS来做(会超时),要用动态规划,还是记录一下吧 ...

  8. 40. Combination Sum II 组合总和 II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  9. 216. Combination Sum III

    /** 216. Combination Sum III * 2016-6-12 by Mingyang* i一定要取到9,虽然大小聪明,想只取到7,但是后面的遍历可能也会遍历到9啊.* 1.长度标准 ...

  10. Combination Sum 和Combination Sum II

    这两道题的基本思路和combination那一题是一致的,也是分治的方法. 其中combination Sum复杂一点,因为每个数可能用多次.仔细分析下,本质上也是一样的.原来是每个数仅两种可能.现在 ...

最新文章

  1. iOS Socket Client 通讯
  2. CentOS7 编译安装 gcc/c++ 9.1
  3. Ubuntu Apache 服务之 PHP 配置
  4. flutter 判断是不是调试模式_女人怎么判断男人是不是喜欢自己//男人真正喜欢女人的追求方式...
  5. gridview汇出EXCEL (ExportGridViewToExcel(dt, HttpContext.Current.Response);)
  6. Specified VM install not found: type Standard VM, name jdk1.7
  7. Mongodb java 例子
  8. 标准模板库(STL)之 map 列传 (三)
  9. linux 升级 git版本,CentOS下升级Git1.7.1升级到Git2.2.1
  10. 拓端tecdat|R语言使用贝叶斯层次模型进行空间数据分析
  11. solidworks——铝型材画法
  12. 第三阶段应用层——1.10 数码相册—main_page主界面的显存管理、页面规划、输入控制
  13. 无法找到 :import javax.annotation.Resource-------Resource 这个注解
  14. 使用CSS绘制一个平行四边形
  15. 10.高光反射Blinn
  16. 【清华集训2014】【BZOJ3812】主旋律
  17. 凯文·米特尼克的建议
  18. 集成电路(IC)摩尔定律
  19. 企业微信 php回调模式,老师,我的是微信企业号,开启回调模式一直不行,总提示 请求该url失败...
  20. 微信小程序 用wx.getRecorderManager()和wx.createInnerAudioContext()制作一个简单的录音播放器(录制以及播放)

热门文章

  1. 如何提高一个研发团队的“代码速度”?
  2. ImportError: cannot import name ‘options‘ from ‘pyecharts‘
  3. 测试开发岗面试问题-工具类
  4. Oracle EM 配置常用命令
  5. jQuery筛选器常用总结
  6. 简单拨号器(Android)
  7. WebService大讲堂之Axis2(9):编写Axis2模块(Module)
  8. 安装和使用Glassfish
  9. for循环 php 增加数组维数_PHP数组在循环中创建多维数组
  10. 上升沿_输入输出的上升沿和下降沿是怎么来的,一起看看