LeetCode22.Generate Parentheses
来源:互联网 发布:mac os x lion系统 编辑:程序博客网 时间:2024/05/29 08:52
题目
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()"]
题目分析
题目意思是给定n对括号,要我们生成所有匹配的序列
题目是括号匹配,自然想到使用队列,一个未完全匹配的序列表示一个状态,队列存储状态,对于每次操作我们将队头的状态推出,然后根据这个状态左括号和右括号的个数生成后续状态,再放入队列。由于每个序列的长度都一定是2n,每次操作状态长度+1,因此每次队列元素全部弹出生成长度相同的下一状态的次数是2n。
后续状态的生成:左括号>右括号,左括号<n,增加左括号或右括号的后续状态
左括号>右括号,左括号=n,增加右括号的后续状态
左括号=0或者左括号=右括号,增加左括号的后续状态
c++代码
class Solution {public: vector<string> generateParenthesis(int n) { queue<string> qu; vector<string> res; string a; qu.push(a); for (int i = 0; i < 2 * n; i++) { int s = qu.size(); for (int j = 0; j < s; j++) { string a = qu.front(); qu.pop(); int left = leftcount(a); int right = rightcount(a); if (left == 0||left == right) { a += "("; qu.push(a); } else if (left > 0&&left < n&&right < left) { string b = a; b += ")"; a += "("; qu.push(a); qu.push(b); } else { a += ")"; qu.push(a); } } } int s = qu.size(); for (int i = 0; i < s; i++) { string b = qu.front(); qu.pop(); res.push_back(b); } return res; } int leftcount(string a) { int count = 0; for (int i = 0; i < a.length(); i++) { if (a[i] == '(') count++; } return count; } int rightcount(string a) { int count = 0; for (int i = 0; i < a.length(); i++) { if (a[i] == ')') count++; } return count; }};
阅读全文
0 0
- [LeetCode22]Generate Parentheses
- [Java]LeetCode22 Generate Parentheses
- LeetCode22:Generate Parentheses
- LeetCode22. Generate Parentheses
- LeetCode22. Generate Parentheses
- LeetCode22. Generate Parentheses
- Leetcode22 Generate Parentheses
- LeetCode22. Generate Parentheses
- Leetcode22: Generate Parentheses
- leetcode22:Generate Parentheses
- LeetCode22.Generate Parentheses
- LeetCode22 Generate Parentheses 括号生成
- leetcode22. Generate Parentheses 栈和dfs的运用
- Leetcode22. Generate Parentheses(生成有效的括号组合)
- LeetCode22——Generate Parentheses(给定n对括号,然后看有多少正确的括号组合)
- Generate Parentheses
- Generate Parentheses
- Generate Parentheses
- 阿里巴巴Java开发手册插件版安装教程
- 处理 /usr/bin/ld: cannot find -lc等编译问题
- 解决跨域问题
- 使用Visual Studio编译器编写程序时不显示窗口或窗口一闪而逝的解决方法
- CodeForces334B
- LeetCode22.Generate Parentheses
- 蓝桥杯 最大最小公倍数
- java int与integer的区别
- 网络学习——unity中Mathf数学运算
- 关于java的反射,调用私有方法(有参数私有方法),私有属性
- Java编程思想-9
- 机器学习项目到底怎么做? 站在巨人的肩膀上!-----资料分享
- vs2017控制台出现中文乱码
- **系统调用**