leetcode_77_combiantion_78_subsets_90_subsets2
来源:互联网 发布:淘宝卖家怎样优化标题 编辑:程序博客网 时间:2024/04/28 17:40
真是有种 “x了狗了”的感觉,DFS这里总是充满了各种各样的问题
最后写的代码可读性和复杂度都差得厉害,虽然AC:
class Solution {public:void solve(int index,int cur,vector<int> &res,vector<vector<int> >&ans,vector<int>& num,int k){if(index==k){ans.push_back(res);return;}for(int i=cur;i<num.size();i++){res.push_back(num[i]);//index++; //如果一开始按照index++的思路写,会影响for循环之后的多次递归,所以用index+1代替solve(index+1,i+1,res,ans,num,k); res.pop_back();}} vector<vector<int> > combine(int n, int k) { vector<vector<int> > ans; vector<int> res; vector<int> num; for(int i=0;i<n;i++) num.push_back(i+1); solve(0,0,res,ans,num,k); return ans; }};
好吧,就在这篇文章之后继续做DFS,发现subsets和subsets2可以按照之前写的框架写:
传送门:
https://leetcode.com/problems/subsets/
其中每一次进行递归时都会产生新的集合,直接加进去就好
class Solution {public:void solve(int index,int cur,vector<int> &res,vector<vector<int> >&ans,vector<int>& num){ans.push_back(res);for(int i=cur;i<num.size();i++){res.push_back(num[i]);//index++;solve(index+1,i+1,res,ans,num); res.pop_back();}} vector<vector<int> > subsets(vector<int> &S) { vector<vector<int> > ans; vector<int> res; //vector<int> num; sort(S.begin(),S.end()); solve(0,0,res,ans,S); return ans; }};
subsets2:
多加一个判定函数就好
传送门:https://leetcode.com/problems/subsets-ii/
AC代码:
class Solution {public: bool check(vector<int> &s,vector<vector<int> >&ans) { for(int k=0;k<ans.size();k++) if(ans[k]==s) return false; return true; }void solve(int index,int cur,vector<int> &res,vector<vector<int> >&ans,vector<int>& num){if(check(res,ans))ans.push_back(res);for(int i=cur;i<num.size();i++){res.push_back(num[i]);//index++;solve(index+1,i+1,res,ans,num); res.pop_back();}} vector<vector<int> > subsetsWithDup(vector<int> &S) { vector<vector<int> > ans; vector<int> res; //vector<int> num; sort(S.begin(),S.end()); solve(0,0,res,ans,S); return ans; }};
0 0
- leetcode_77_combiantion_78_subsets_90_subsets2
- 如何在本地搭建一个Android应用crashing跟踪系统-ACRA
- 推箱子
- jsp和css放置图片的路径问题
- 教材上的例子--有限状态机,四种建模方式
- 操作系统如何产生的
- leetcode_77_combiantion_78_subsets_90_subsets2
- C# 的OPC客户端 (Advosol OPCDA.NET组件)
- poj2993
- [LeetCode]Combination Sum
- 程序设计性能优化整理(一)
- JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载
- Activity的screenOrientation属性
- hdu 3999 The order of a Tree
- Android 编程下短信监听在小米手机中失效的解决办法