数字组合

  • 描述
  • 笔记
  • 数据
  • 评测

给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。

例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:

[7],

[2,2,3]

注意事项
  • 所有的数字(包括目标数字)均为正整数。
  • 元素组合(a1, a2, … , ak)必须是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。
  • 解集不能包含重复的组合。

您在真实的面试中是否遇到过这个题?

Yes

样例

给出候选数组[2,3,6,7]和目标数字7

返回 [[7],[2,2,3]]

解题思路:

主要方法是进行递归和回溯。

回溯的触发条件是当前算出的sum==target或者sum>target 

递归的时候就是从当前cur位置的数一直添加到tem里,如果遇到回溯的情况,则弹出之前加入的数,同时更新tsum。

描述的不是很清楚,具体思路可以参考一下博文:

http://blog.csdn.net/guoziqing506/article/details/51873362


 需要注意的一点:在进行递归和回溯之前需要对candidates数组进行排序,并且将其中的重复元素进行删除。否则的话返回的rt数组中会出现重复的值。

例如输入为【1,1,2】 2     不删除重复的1的情况下会返回{【1,1】【1,1】【1,1】【2】}


class Solution {
public:/*** @param candidates: A list of integers* @param target:An integer* @return: A list of lists of integers*/void countall(vector<vector<int> >& rt, vector<int>tem, vector<int> candidates, int tsum, int cur, int target){if (tsum == target){rt.push_back(tem);return;}if(tsum>target)return;for(int i=cur;i<candidates.size();i++){tem.push_back(candidates[i]);tsum+=candidates[i];countall(rt,tem,candidates,tsum,i,target);tsum-=tem[tem.size()-1];tem.pop_back();}}vector<vector<int> > combinationSum(vector<int> &candidates, int target) {// write your code herevector<vector<int> > rt;if(candidates.size()==0)return rt;vector<int> tem;sort(candidates.begin(),candidates.end());candidates.erase( unique( candidates.begin(), candidates.end() ), candidates.end() ); //删除掉candidate中的重复元素,因为重复元素会导致rt中有重复的解countall(rt,tem,candidates,0,0,target);return rt;}
};

LintCode 数字组合 题解相关推荐

  1. leetcode题解-17.电话号码的数字组合

    电话号码的数字组合:link 1.题目分析 组合方式随着数字的增多是呈现为树状发散的方式,主要就是代码实现了. 2.示例代码 class Solution {public:vector<stri ...

  2. 36 数字组合(Combination Sum)

    文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.3 时间复杂度 2.4 空间复杂度 3 源码 1 题目 题目:数字组合(Combination Sum) 描述:给定一个候选数字的集合 ...

  3. 拼多多2021笔试真题集 -- 1. 多多的数字组合

    多多的数字组合 多多君最近在研究某种数字组合: 定义为:每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N. 满足条件的数字可能很多,找到其中的最小值即可. 多多君还有很多研究课题 ...

  4. python编程实战(二):一文教你生成随机验证码!大小写字母与数字组合,位数可以控制

    随机验证码的生成 前言 正文 实现 代码 效果 前言 验证码验证,是常见的安全验证的一种方式,可以用来杜绝脚本和机器人操作等等: 除了本文介绍的简单的验证码之外,还有拼图验证.文字顺序验证等常见的验证 ...

  5. validate验证长度 vue_vue input 输入校验字母数字组合且长度小于30的实现代码

    下面一段代码给大家分享vue input 校验字母数字组合且长度小于30,具体代码如下所示: validateJyh(glhm){//校验关联交易号 var reg = /^[A-Za-z0-9]{1 ...

  6. 检索数据_20_按照字符串数字组合的排序

    按照字符串数字组合的排序 需求描述 需求:假设我们从雇员表emp里创建个视图,这里仅有一个字段,该字段叫data由员工名称和部门号拼接而成,我们想实现一个查询可以按照原来的部门编号逆序排序筛选出数据. ...

  7. python电话号码对应的字符组合_Python3 在字符串中提取字母+数字组合微信账号、电话等 - pytorch中文网...

    今天处理数据要提取字符串中的微信,字符串中包含中文英文Emoji,标点符号等. python 提取字符串中的电话 提取电话相对简单,多个电话也可以提取 import re desstr = " ...

  8. 小数位数_圆周率的小数位是否包含了所有的数字组合?

    人们很早就认识到,无论多大的圆,其周长除以直径是一个恒定的常数,该常数被称为圆周率.一直以来,数学家知道圆周率是一个小数,但并不清楚这个小数是否是循环的.为此,数学家不断想办法计算出更多小数位的圆周率 ...

  9. 牛客题霸 [数组中只出现一次的数字] C++题解/答案

    牛客题霸 [数组中只出现一次的数字] C++题解/答案 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 用map来记录每个数字出现几次, ...

最新文章

  1. 【NOIP2010】引水入城
  2. 自定义Django的admin界面
  3. GridView RowCommand事件中取得當前行
  4. Linux gcc/g++链接编译顺序详解
  5. 正则化、交叉验证、泛化能力
  6. vue的token刷新处理
  7. 合唱团算法(DP问题)
  8. 毕昇 JDK:为啥是ARM 上超好用的 JDK
  9. 若依如何配置允许跨域访问?
  10. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈
  11. 科研论文绘图:ppt, word,latex,python matplotlib绘图 ,矢量图,高清图,放大不失真
  12. 网页开发者模式调整到手机模式_苹果全球开发者大会将于6月22日召开 全线上模式...
  13. java关键字false_无聊,null,true,false是java关键字吗
  14. 【学习笔记】matlab进行数字信号处理(一)生成信号及信号的时域频域分析
  15. 用友t3 服务器通讯协议,远程登陆用友t3服务器
  16. 差点被一个截图忽悠了,分析一个QQ空间钓鱼网站
  17. 随机梯度下降算法 入门介绍(最通俗易懂)
  18. 告诉你苹果手机如何录屏的同时录音
  19. List 集合对象比较大小
  20. google map for Android

热门文章

  1. #私藏项目实操分享#Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评
  2. 用计算机语言编写花瓣雨,花瓣雨【石家庄计算机学院吧】_百度贴吧
  3. numpy 中ravel()和flatten()区别
  4. 剪辑视频调整视频播放倍速,改变视频时长
  5. c#样条曲线命令_C# chart控件绘制曲线
  6. 2022级计算机保研历程
  7. PhotoScan Google照片扫描仪,让手机替代扫描仪
  8. 数据结构与算法A 查找
  9. 2020-7-3中兴IC开发设计师 专业面,
  10. DS8100更换PPS电源线