40. Combination Sum II
2016-09-22 21:04
375 查看
这道题是39题的改进,先要对数组进行排序,然后还要加一些限定元素,保证每个答案不一样,且每个元素只取一次。
class Solution { public: vector<vector<int> >result; vector<int>temp; vector<vector<int> > combinationSum2(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); if(candidates.empty()) return result; dfs(candidates,target,0); return result; } void dfs(vector<int>& candidates,int target,int start) { if(target<0) return; else if(0==target) { result.push_back(temp); return; } else { for(int i=start;i<candidates.size();i++) { temp.push_back(candidates[i]); dfs(candidates,target-candidates[i],i+1);//保证每个元素取一次 temp.pop_back(); while(candidates[i+1]==candidates[i])//保证答案不重复 ++i; } } } };
class Solution { public: vector<vector<int> > combinationSum2(vector<int>& candidates, int target) { vector<vector<int> >result; vector<int>temp; if(candidates.empty()) return result; sort(candidates.begin(),candidates.end()); dfs(candidates,target,0,result,temp); return result; } void dfs(vector<int>& candidates,int target,int start,vector<vector<int> >&result,vector<int> &temp) { if(target<0) return; else if(0==target) { result.push_back(temp); return; } else { for(int i=start;i<candidates.size();i++) { if(i!=start&&candidates[i]==candidates[i-1]) continue; temp.push_back(candidates[i]); dfs(candidates,target-candidates[i],i+1,result,temp); temp.pop_back(); } } } };
相关文章推荐
- 关于栈、堆、静态变量区的访问效率
- 关于指针定义的一些问题
- 关于C++ 11的新特性
- 进制转换并打印
- 函数指针
- Linux下C语言的内存对齐
- Linux下C语言的内存对齐
- C/C++的字符串流
- c/c++的笔记(看到想记录的就添加)
- 使用WH_MOUSE_LL钩子来判断按键是否是mouse_event模拟的
- MinGW环境变量设置、CodeBlock添加额外的库
- NodeJS C/C++扩展之Hello World~
- 走进BLAS/LAPACK(1)
- 走进BLAS/LAPACK(2)--blas
- 走进blas/lapack(3)--cblas
- C语言宏详解
- websocket C/C++服务器应用
- 内存分配学习(一)-- 实现一个malloc
- 逗号运算符与加加减减
- CCF CSP认证2016年9月,NO.3 炉石传说