lintcode-数字组合-135
2015-09-13 13:29
281 查看
给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。
例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:
[7],
[2,2,3]
样例
给出候选数组[2,3,6,7]和目标数字7
返回 [[7],[2,2,3]]
注意
所有的数字(包括目标数字)均为正整数。
元素组合(a1, a2,
… , ak)必须是非降序(ie, a1 ≤ a2 ≤
… ≤ ak)。
解集不能包含重复的组合
例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:
[7],
[2,2,3]
样例
给出候选数组[2,3,6,7]和目标数字7
返回 [[7],[2,2,3]]
注意
所有的数字(包括目标数字)均为正整数。
元素组合(a1, a2,
… , ak)必须是非降序(ie, a1 ≤ a2 ≤
… ≤ ak)。
解集不能包含重复的组合
class Solution { public: map<vector<int>,bool> check ; void backtracing(vector<vector<int> > &ret,vector<int> &vec,vector<int> &can,int cur,int n,int left){ if(0==left){ if(0==check.count(vec)){ ret.push_back(vec); check[vec]=true; } return ; } for(int i=cur;i<n;++i){ if(can[i]<=left){ vec.push_back(can[i]); backtracing(ret,vec,can,i,n,left-can[i]); vec.pop_back(); }else break; } } vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > ret; vector<int> vec; int n; if((n=candidates.size())==0) return ret; sort(candidates.begin(),candidates.end()); backtracing(ret,vec,candidates,0,n,target); return ret; } };
相关文章推荐
- 关于函数返回值为引用和指针的问题
- 1.2交叉工具链
- Linux内核编程的特点
- GBK和UTF8的区别,该选择哪个版本
- 1、windows下开放热点,及查找连接上的客户IP
- MVCC实现-MYSQL INNODB MVCC实现
- Javascript继承(暂略去中转函数、组合继承和寄生继承)
- Nginx学习笔记一_UNIX中的IO模型
- Unbuntu12.04 x64 安装jdk-7u45-linux-x64.tar.gz
- Leetcode: Reverse Words in a String
- jtagger Versatile multiprogrammer for FPGAs, MCUs, etc.
- “状态机”学习笔记
- 陈越、何钦铭《数据结构》第二讲线性结构 笔记
- 你应该知道的最好Webmail邮件客户端
- typedef用途
- xml
- Android 超高仿微信图片选择器 图片该这么加载
- Android之道--Fragment使用记录
- 百度2016校园招聘:软件测试工程师
- Android之道--Fragment使用记录