Generate Parentheses -- leetcode
来源:互联网 发布:台湾 香港 知乎 编辑:程序博客网 时间:2024/05/16 13:43
题目描述:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
题目大意:
给定整数 n,生成 n 个“()”排列。有
For example, given n = 3, a solution set is:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
思想:
规则:左括号的个数 大于等于 右括号的个数
假设我们已经打印了 m 个括号,此时 左括号剩余 left 个, 右括号 剩余 right 个。
是否可以继续打印左括号,取决于剩余的左括号个数left是否大于0,如果大于0,则可以继续打印左括号。
是否可以打印右括号,在剩余的右括号大于0的前提下,还要满足剩余左括号的个数left 小于 剩余右括号的个数right(即已经打印的左括号个数 大于 已经打印的右括号个数),如若,剩余左括号的个数 left 大于 等于 剩余右括号的个数 right, 即已经打印的左括号个数 小于等于 右括号的个数(即:“相等情况:(())”“小于情况(不成立):())”),此时,再打印右括号,导致括号不匹配。
代码:
#include <iostream>#include <vector>#include <string>using namespace std;void createParenthesis(vector<string>&, string, int, int);vector<string> generateParenthesis(int);int main(){ int n; cin >> n; vector<string> ans = generateParenthesis(n); for (int i = 0; i < ans.size(); ++i) { cout << ans[i] << endl; } return 0;}/* left : 左括号剩余个数 right : 右括号剩余个数*/void createParenthesis(vector<string>& ans, string s, int left, int right) { //左右括号剩余为0,保存此序列 if (left == 0 && right == 0) ans.push_back(s); //剩余左括号个数大于0,可以继续打印左括号 if (left > 0) createParenthesis(ans, s + '(', left - 1, right); //剩余右括号个数大于0,且剩余左括号的个数小于右括号 //即已经打印的左括号个数大于已经打印的右括号的个数,可以继续打印左括号 if (right > 0 && left < right) createParenthesis(ans, s + ')', left, right - 1);}vector<string> generateParenthesis(int n) { vector<string> ans; if (n <= 0) return ans; string s = ""; createParenthesis(ans, s, n, n); return ans;}
结果:
0 0
- LeetCode: Generate Parentheses
- LeetCode: Generate Parentheses
- [Leetcode] Generate Parentheses
- leetcode 51: Generate Parentheses
- [LeetCode] Generate Parentheses
- Leetcode: Generate Parentheses
- LeetCode Generate Parentheses
- 【leetcode】Generate Parentheses
- [LeetCode]Generate Parentheses
- Leetcode Generate Parentheses
- LeetCode-Generate Parentheses
- LeetCode: Generate Parentheses
- LeetCode - Generate Parentheses
- LeetCode 22: Generate Parentheses
- LeetCode: Generate Parentheses
- Leetcode: Generate Parentheses
- 【leetcode】Generate Parentheses
- Leetcode: Generate Parentheses
- Media Data之多媒体数据库(三)MediaStore
- texlive 2016 + beamer 中文处理
- 自定义dialog宽度全屏
- Android错误transformClassesWithJarMergingForUcharDev 错误
- js 解决由于(bom文件格式)产生的空白行
- Generate Parentheses -- leetcode
- 回调函数和函数指针
- tomcat如何启用Gzip对静态文件压缩
- BZOJ1189 [HNOI2007]紧急疏散evacuate
- [技术研究]Android插件化技术学习(Small插件框架)
- Java经典问题算法大全
- More Cowbell
- 带你走进多线程的世界(多线程实现方式)
- abap删除DN的BAPI:BAPI_OUTB_DELIVERY_CHANGE