码迷,mamicode.com
首页 > 其他好文 > 详细

22. Generate Parentheses

时间:2018-01-22 13:03:21      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:push   记录   class   vector   fun   generate   body   解析   string   

22. 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:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

解析

  • 这道题要生成正确形式的括号匹配的数量,其实就是卡特兰数,至于要输出所有括号的正确组合形式,可以采用递归。用两个变量l和r记录剩余左括号和右括号的数量,当且仅当左右括号数量都为0时,正常结束。当然还有一点限制,就是剩余的右括号数量比左括号多时才能添加右括号
class Solution_22 {
public:
    void dfs(string str,int left,int right,int total,vector<string>& vec)
    {
        if (left+right==total)
        {
            vec.push_back(str);
        }
        if (left<total/2)  // 不能用left<=total/2等号
        {
            dfs(str + '(', left + 1, right, total, vec);
        }
        if (left>right&&right<total/2) //左括号多余右括号
        {
            dfs(str + ')', left, right + 1, total, vec);
        }
        
        return;
    }

    vector<string> generateParenthesis(int n) {
        vector<string> vec;
        string str;
        if (n==0)
        {
            return vec;
        }
        dfs("", 0, 0, 2 * n,vec);
        return vec;
    }
};

题目来源

22. Generate Parentheses

标签:push   记录   class   vector   fun   generate   body   解析   string   

原文地址:https://www.cnblogs.com/ranjiewen/p/8328230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!