Combination Sum 2 不允许重复
来源:互联网 发布:asp网页 sql数据库 编辑:程序博客网 时间:2024/05/17 08:10
虽然号称为combination sum的follow up,我觉得不如原题有难度。不重复是比较自然的。
下次遍历是从当前元素的下一个开始就可以了。这道题仍然存在重复序列的问题,也就是符合条件的相同序列存在多个,如何去重呢?一种办法是保存所有符合条件的序列,最后对总结果进行sort , unique ,resize,这样做代价还是比较大的。另一种做法是防患于未然,提前把可能存在的重复干掉。因为已知序列经过预处理排序,所以可能导致相同序列的数值都是集中在一起的,也就是该数值如果包含在有效序列中的话,那么只能存在一次,那么后面相同的只要跳过即可。注意:只是在本次计算中跳过,而不是总循环中跳过,还是代码中比较清楚:
class Solution {public: void doit(vector<int> &num,int target,int start,vector<int> &tmp,vector<vector<int>> &res){ if(target==0){ res.push_back(tmp); return ; } for(int i=start;i<num.size();++i){ if(target-num[i]<0)continue; tmp.push_back(num[i]); doit(num,target-num[i],i+1,tmp,res); tmp.pop_back(); //if next is same ,then may exists duplicated sequence, just skip it! while(i<num.size()-1 and num[i]==num[i+1]) i++; } } vector<vector<int> > combinationSum2(vector<int> &num, int target) { vector<vector<int>> res; vector<int> tmp; if(num.size()==0) return res; sort(num.begin(),num.end()); doit(num,target,0,tmp,res); //another way to handle duplicates //sort(res.begin(),res.end()); //auto it=unique(res.begin(),res.end()); //res.resize(distance(res.begin(),it)); return res; }};
0 0
- Combination Sum 2 不允许重复
- leetcode | Combination Sum & Combination Sum 2
- [LeetCode]Combination Sum 2(!!!!!)
- [LeetCode] Combination Sum 2
- 【Leetcode】Combination sum 1,2
- Combination Sum II 全排列求和无重复
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- 设置、获得对话框中 编辑框控件 EDIT 的内容
- 我的艰难创业故事
- 【Python学习】Python连接MySQL
- 不允许创建临时变量,交换两个数的内容
- Ubuntu java 环境变量
- Combination Sum 2 不允许重复
- 链表中插入一个节点的三种情况
- 我的IMU开发之路第一天之硬件篇
- java hashset的那些事
- 并发和并行
- 解决Android 离线Doc文档访问速度慢的有效方法
- Html快速入门总结
- Linux 下三种方式设置环境变量
- andriod之ContentProvider读取外部存储图片