LeetCode第21题之Generate Parentheses(两种解法)
来源:互联网 发布:51单片机指令集ppt 编辑:程序博客网 时间:2024/04/18 14:01
C++代码:
解法一(在LeetCode上运行效率高于解法二):
#include <vector>#include <iostream>#include <string>using namespace std;class Solution {private: vector<string> res;public: //leftRemain保存还可以放左括号的数目,rightRemain保存还可以放右括号的数目 void dfs(string state, int leftRemain, int rightRemain) { //这种情况括号不匹配 if (leftRemain > rightRemain) { return; } if (0 == leftRemain && 0 == rightRemain) { res.push_back(state); return; } if (leftRemain > 0) { dfs(state + "(", leftRemain -1, rightRemain); } if (rightRemain >0 ) { dfs(state + ")", leftRemain, rightRemain-1); } } vector<string> generateParenthesis(int n) { dfs("",n,n); return res; }};int main(){ Solution s; vector<string> r = s.generateParenthesis(3); for (vector<string>::iterator it = r.begin();it != r.end();++it) { cout<<*it<<endl; } return 0;}
解法二:
#include <vector>#include <iostream>#include <string>using namespace std;class Solution {private: //保存结果 vector<string> res;public: void fun(int deep, int n, int leftNum, int leftTotalNum, string s) { //如果左括号的总数大于n,则该字符串不可能满足要求 if (leftTotalNum > n) { return; } //如果到达最底层,则s一定满足题意。因为运行到这里时,leftTotalNum<=n,而leftNum>=0 if (n*2 == deep) { res.push_back(s); return; } for (int i=0;i<2;++i) { if (0 == i) { //在deep+1的位置放左括号 fun(deep+1, n, leftNum+1, leftTotalNum+1, s + "("); } else { //如果有剩余未匹配的左括号数,才能放右括号 if (leftNum > 0) { fun(deep+1, n, leftNum-1, leftTotalNum, s + ")"); } } } } vector<string> generateParenthesis(int n) { //剩余未匹配的左括号数 int leftNum = 0; //字符串中左括号总数 int leftTotalNum =0; string s = ""; fun(0, n, leftNum, leftTotalNum, s); return res; }};int main(){ Solution s; vector<string> r = s.generateParenthesis(3); for (vector<string>::iterator it = r.begin();it != r.end();++it) { cout<<*it<<endl; } return 0;}
0 0
- LeetCode第21题之Generate Parentheses(两种解法)
- LeetCode 22:Generate Parentheses的递归,回溯两种解法
- leetcode 第20-21题 Valid Parentheses & Generate Parentheses
- leetcode之 Generate Parentheses
- leetcode之Generate Parentheses
- leetcode之 Generate Parentheses
- 【Leetcode】之Generate Parentheses
- LeetCode之Generate Parentheses(C++)
- LeetCode进阶之路(Generate Parentheses)
- LeetCode 21 Generate Parentheses
- LeetCode之22----Generate Parentheses
- leetcode第22题——**Generate Parentheses
- 第44题 Generate Parentheses
- LeetCode(22)Generate Parentheses
- 《leetCode》:Generate Parentheses(hard)
- (Leetcode)22. Generate Parentheses
- LeetCode (22)Generate Parentheses
- Leetcode-Generate Parentheses(递归)
- TrueCrypt 使用经验[1]:关于加密算法和加密盘的类型
- Android仿余额宝金额动画
- [hadoop]hive的管理(十一)
- 在iOS中使用钥匙串访问——sskeychain框架
- CentOS设置代理, yum, wget
- LeetCode第21题之Generate Parentheses(两种解法)
- 使用Validator做SpringMVC的验证框架 - 配置SpringMVC环境
- NSRooLoop 浅析
- 人脸检测算法 性能统计
- openstack win7镜像制作并支持管理员登陆
- HMM(隐形马尔科夫模型)
- Symmetric Tree
- 553 relay check local fail. (本域用户必须通过验证) ----一个老项目发邮件问题
- 笔者带你剖析大数据存储HBase特性