Generate Parentheses--LeetCode
来源:互联网 发布:elsevier是什么数据库 编辑:程序博客网 时间:2024/06/11 05:52
1.题目
Generate Parentheses
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:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
2.题意
给定 n 对括号, 编写一个函数来生成格式正确的括号的所有组合。
3.分析
考虑递归求解
字符串只有’(‘和’)’两种字符,而且最终结果必定是3个’(‘,3个’)’
定义变量left和right表示左右括号的剩余个数
分为3种情况
1)left>right
即出现’)(‘这样的非法串,直接返回,不继续处理
2)left和right都为0
则此时生成的字符串已有n个左括号和n个右括号
且字符串合法,则存入结果中后返回
3)以上两种情况都不满足,
若left>0,则调用递归函数,注意left-1
若right>0,也调用递归函数,注意right-1
4.代码
1)分析中的代码实现
class Solution {public: vector<string> generateParenthesis(int n) { vector<string> result; generateParenthesisDFS(result, n, n, ""); return result; } void generateParenthesisDFS(vector<string> &result, int left, int right, string str){ if(left < 0 || right <0 || left > right) return; if(left == 0 && right == 0) { result.push_back(str); return; } else { // if(left > 0) generateParenthesisDFS(result, left - 1, right, str + '('); // if(right > 0) generateParenthesisDFS(result, left, right - 1, str + ')'); } return; }};
2)思路与1类似,注意不要遗漏str.size() == n * 2
第2步的判断right < left不要写错
class Solution {public: vector<string> generateParenthesis(int n) { vector<string> result; string str; generateParenthesisDFS(result, n, 0, 0, str); return result; } void generateParenthesisDFS(vector<string> &result, int n, int left, int right, string &str){ if(left < n) { str.push_back('('); generateParenthesisDFS(result, n, left + 1, right, str); str.pop_back(); } if(right < left) { str.push_back(')'); generateParenthesisDFS(result, n, left, right + 1, str); str.pop_back(); } if(str.size() == n * 2) result.push_back(str); return; }};
阅读全文
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
- bzoj 1070(区间dp)
- lvm在线扩展
- String、StringBuffer与StringBuilder之间区别
- Docker 实战笔记
- Diffie-Hellman秘钥交换算法到Oakley密钥算法
- Generate Parentheses--LeetCode
- Android攻防二
- IntelliJ远程调试教程
- 数据结构实验之栈与队列三:后缀式求值
- 我的Python笔记知识点总结
- WIN DLL
- IDEA中搭建struts2项目
- 11 cookie&&session的学习笔记
- Linux下查看文件精确到秒的修改时间