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:
[ "((()))", "(()())", "(())()", "()(())", "()()()"]

利用递归完成回溯算法,以n=2为例:
进入第一层函数,left=0,right=0,进入第二个if,填一个左括号
“(”进入第二层函数,left=1,right=0,进入第二个if,填一个左括号
“((”进入第三层函数,left=2,right=0,进入第三个if,填一个右括号
“(()”进入第四层函数,left=2,right=1,进入第三个if,填一个右括号
“(())”进入第五层函数,left=2,right=2,进入第一个if,结果压入数组,返回第四层
str为“(()”,返回第三层
str为“((”,返回第二层
str为“(”,left=1,right=0,进入第三个if,填一个右括号
“()”进入第三层,left=1,right=1,进入第二个if,填一个左括号
“()(”进入第四层,left=2,right=1,进入第三个if,填一个右括号
“()()”进入第五层,left=2,right=2,进入第一个if,结果压入数组,返回第四层
str为“()(”,返回第三层
str为“()”,left=1,right=1,返回第二层
str为“(”,返回第一层
str为“”left=0,right=0,返回

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    var res = [];
    var help = function(str,left,right) {
        if (right===n)
            res.push(str);
        if (left<n)
            help(str+"(",left+1,right);
        if (right<left)
            help(str+")",left,right+1);
    };
    help("",0,0);
    return res;
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容