39. Combination Sum(medium, backtrack 的经典应用, 重要)
2024-10-19 13:38:38
Given a set of candidate numbers (C) (without duplicates) 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 the target) will be positive integers.
- 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]
]
本题是 backtrack(回溯法) 的经典应用.通过本题,仔细观察 backtrack 基本框架,并感受其应用.
另外, subset 的题目也用 backtrack 方法.
人家想法,自个代码:
- cpp 副产品:
v.pop_back();
弹出队尾元素. - 要注意的是: 下面代码中 backtrack 方法中的 res, temp, A, 尤其是 temp, 他们都分别指向对应的一个对象,无论 backtrack 方法被嵌套地调用多少次!
// backtrace method
vector<vector<int>> combinationSum(vector<int>& A, int ta) {
sort(A.begin(), A.end());
vector < vector<int> > res;
vector<int> temp;
backtrack(res, temp, A, ta, 0);
return res;
}
void backtrack(vector<vector<int> >& res, vector<int>& temp, vector<int>& A,
int remain, int start) {
if (remain < 0)
return;
else if (remain == 0) {
res.push_back(temp);
return;
} else {
for (int i = start; i < A.size(); i++) {
temp.push_back(A[i]);
// not i + 1, because A[i] might be reused.
backtrack(res, temp, A, remain - A[i], i);
temp.pop_back();
}
return;
}
}
最新文章
- ORACLE ORA-01157: 无法标识/锁定数据文件
- android自定义view属性
- golang学习之beego框架配合easyui实现增删改查及图片上传
- BroadcastReceiver的简介
- C# 和Jsonp的一个小demo 用jQuery与JSONP轻松解决跨域访问的问题
- Modbus Poll :Byte Missing Error或CRC Error
- 手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b
- 用PHP实现一个高效安全的ftp服务器(二)
- SQL Server日志文件庞大收缩方法(实测好用)
- SpringMVC的映射器、适配器、解析器
- java实现:将一个数逆序输出
- angularJS+KindEditor无法获取或清空textarea的值
- python之第三方模块安装
- Attention模型
- 解决Myeclipse ctrl+h带来的困扰
- Android开发--ZZ:Android APK反编译详解(附图)
- java mysql大数据量批量插入与流式读取分析
- Hibernate与MyBatis的对比总结
- Mysql 创建普通用户、数据库、表、插入记录,用户赋权
- swfupload js中 file 对象的属性