【一天一道LeetCode】#40. Combination Sum II
2016-05-04 19:40
274 查看
一天一道LeetCode系列
(一)题目
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.Each number in C may only be used once in the combination.
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 10,1,2,7,6,1,5 and target 8,
A solution set is:
[1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
(二)解题
具体思路与【一天一道LeetCode】39. Combination Sum这篇博文一样,采用动态规划和回溯法进行求解。/* 和上一题的思路一样,区别是数字不能重复查找,但Vector中允许有重复的数字 具体改动请看代码注释 */ class Solution { public: vector<vector<int>> ret; vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); for(int idx = 0;idx<candidates.size();idx++) { if(idx-1>=0 && candidates[idx] == candidates[idx-1]) continue;//避免重复查找 else { if(candidates[idx]<=target) {//如果小于则调用动态规划函数 vector<int> tmp; tmp.push_back(candidates[idx]); combinationDfs(candidates,tmp,idx,target-candidates[idx]); } } } return ret; } void combinationDfs(vector<int>& candidates ,vector<int>& tmp, int start ,int target) { if(target == 0){ ret.push_back(tmp); return; } for(int i = start+1 ; i < candidates.size() ; i++)//从start+1开始查找,避免了数字重复查找 { if(candidates[i] < target){ tmp.push_back(candidates[i]); combinationDfs(candidates,tmp,i,target-candidates[i]); tmp.pop_back(); //回溯 } else if(candidates[i] == target){ tmp.push_back(candidates[i]); ret.push_back(tmp); tmp.pop_back();//回溯 } else { return; } while(i+1< candidates.size()&&candidates[i]==candidates[i+1]) i++;//去除重复的查找 } } };
相关文章推荐
- HDU 4738 双联通分量
- Struts2笔记01
- C++第四次实验-----继承和派生
- Java基础第三天_数组
- 毕业论文中的“参考文献”获取(经验三---获取某篇文章的文献格式)
- IntelliJ打包可执行的Jar包
- 指定时间,跳转页面
- Junit之测试顺序---FixMethodOrder
- Java学习笔记之数组、枚举
- HDFS 基本文件操作API
- 集群环境ssh免密码登录设置
- get set
- 题目1028:继续畅通工程
- get set
- CSS全屏布局的6种方式
- JAVA线程池ThreadPoolExecutor-转
- Leetcode - Rotate Array
- 关于静态库添加图片资源的解决方案
- DOO-SABIN 细分曲面(编辑中)
- 圆形图片