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;
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容