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;
};