【LeetCode】22. Generate Parentheses
来源:互联网 发布:网站代备案 知乎 编辑:程序博客网 时间:2024/06/05 04:16
题目描述
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()"]
解题思路
以下提供两种解题思路
- 直接使用回溯法遍历所有情况,然后在子节点处使用一个栈来判断括号是否完全对应。这是比较容易想到的,但是相当耗时,实测33ms
- 直观的解法。分别使用n和m来记录还需要加上多少个”(“和”)”。递归向下求解,当n>0时,添加”(“并给n-1以及m+1, 当m>0时,添加”)”并给m-1。当n和m都为0时,则为符合条件的情况。
AC代码
- 解法一(33ms)
class Solution {public: void genPar(vector<string>& ans, string& curStr, int n) { if (curStr.size() == n) { stack<char> tempS; for (int i = 0; i < n; ++i) { if (tempS.empty()) tempS.push(curStr[i]); else { char topChar = tempS.top(); if (topChar == '(' && curStr[i] == ')') tempS.pop(); else tempS.push(curStr[i]); } } if (tempS.empty()) ans.push_back(curStr); } else { curStr.push_back('('); genPar(ans, curStr, n); curStr.pop_back(); curStr.push_back(')'); genPar(ans, curStr, n); curStr.pop_back(); } } vector<string> generateParenthesis(int n) { string tempStr = ""; vector<string> ans; genPar(ans, tempStr, 2*n); return ans; }};
- 解法二(3ms)
class Solution {public: vector<string> generateParenthesis(int n) { vector<string> res; addingpar(res, "", n, 0); return res; } void addingpar(vector<string> &v, string str, int n, int m){ if(n==0 && m==0) { v.push_back(str); return; } if(m > 0){ addingpar(v, str+")", n, m-1); } if(n > 0){ addingpar(v, str+"(", n-1, m+1); } }};
0 0
- [LeetCode]22.Generate Parentheses
- LeetCode --- 22. Generate Parentheses
- LeetCode 22.Generate Parentheses
- [Leetcode] 22. Generate Parentheses
- 【LeetCode】22.Generate Parentheses
- [leetcode] 22.Generate Parentheses
- 【leetcode】22. Generate Parentheses
- Leetcode-22.Generate Parentheses
- [leetcode] 22. Generate Parentheses
- 22. Generate Parentheses LeetCode
- leetcode 22. Generate Parentheses
- [LeetCode]22. Generate Parentheses
- leetcode 22. Generate Parentheses
- leetcode 22. Generate Parentheses
- LeetCode 22. Generate Parentheses
- [LeetCode]22. Generate Parentheses
- LeetCode *** 22. Generate Parentheses
- LeetCode 22. Generate Parentheses
- 学习方法
- Windows Qt Boost MinGW配置记录
- 富文本相关处理的属性和思路
- ZigBee ZStack OSAL层API功能函数汇总
- 错误:Android工程→右键属性→没有C/C++ Build选项
- 【LeetCode】22. Generate Parentheses
- MyBatis Generator 详细讲解
- fragment懒加载
- Ambari和ClouderaManager主要不同对比
- java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
- thinkphp中的变量输出
- 优化UITableViewCell高度计算的那些事
- 数据挖掘十大算法之CART详解
- MongoDB数据库设计(二)