zoukankan      html  css  js  c++  java
  • Leetcode: 22. Generate Parentheses

    Description

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    Example

    For example, given n = 3, a solution set is:
    
    [
        "((()))",
        "(()())",
        "(())()",
        "()(())",
        "()()()"
    ]
    

    思路

    • 不用想,肯定是递归
    • 刚开始错误的思路:把一对括号看成一组,然后列举两种情况,然后就错了
    • 正确的思路:
      • 分析一下括号的形式,刚开始肯定是左括号,然后可以是左,可以是右,当左括号用完的时候,全部添右括号。
      • 当左括号个数大于右括号时,可以加右括号
    • 详见代码

    代码

    class Solution {
    public:
        vector<string> generateParenthesis(int n) {
            vector<string> res;
            getParenthesis(n, 0, 0, "",  res);
            
            return res;
        }
        
        void getParenthesis(int n, int l, int r, string path, vector<string> &str){
            if(l == n){
                str.push_back(path.append(n - r, ')'));
                return;
            }
            
            getParenthesis(n, l + 1, r, path + "(", str);
            if(l > r)
                getParenthesis(n, l, r + 1, path + ")", str);
        }
    };
    
  • 相关阅读:
    在JS和.NET中使用JSON (以及使用Linq to JSON定制JSON数据)
    转载JSON格式化工具
    bzoj3771 Triple
    hdu 2082 找单词
    bzoj 3143: [Hnoi2013]游走
    Wannafly挑战赛17 B
    基尔霍夫矩阵
    矩阵&行列式
    luogu P2421 [NOI2002]荒岛野人
    bzoj 2818: Gcd
  • 原文地址:https://www.cnblogs.com/lengender-12/p/6822606.html
Copyright © 2011-2022 走看看