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

22.Generate Parentheses

时间:2020-05-19 18:18:43      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:递归调用   来源   lan   for   思路   log   amp   oid   get   

给定一个整数n,包含 n个左括号和 n个右括号,将这n对括号组成有效的符号类型。
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]


思路来源,Grandyang
利用递归,需要用到辅助函数,参数为 左括号left,右括号right,递归调用(left-1, right, string+‘(‘, res)和 (left, right-1, string+‘)‘,res),当left=right=0表示组合正常,将其结果加入容器中,而 right > left 表示右括号用的比左括号多,如 ")" 这种非法情形,就return.

class Solution {
public:
    vector<string> generateParenthrsis(int n) {
        if (n <= 0) return{};
        vector<string> res;
        generateParenthrsisDFS(n, n, "", res);
        return res;
    }
    void generateParenthrsisDFS(int left, int right, string s, vector<string>& ans) {
        if (right < left) return;
        if (left == 0 && right == 0) ans.push_back(s);
        else {
            if (left > 0) generateParenthrsisDFS(left - 1, right, s + (, ans);
            if (right > 0) generateParenthrsisDFS(left, right - 1, s + ), ans);
        }
    }
};

 

22.Generate Parentheses

标签:递归调用   来源   lan   for   思路   log   amp   oid   get   

原文地址:https://www.cnblogs.com/luo-c/p/12918356.html

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