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為例:
進(jìn)入第一層函數(shù)镣奋,left=0,right=0,進(jìn)入第二個(gè)if孽鸡,填一個(gè)左括號(hào)
“(”進(jìn)入第二層函數(shù),left=1,right=0占哟,進(jìn)入第二個(gè)if捶箱,填一個(gè)左括號(hào)
“((”進(jìn)入第三層函數(shù),left=2,right=0膘流,進(jìn)入第三個(gè)if絮缅,填一個(gè)右括號(hào)
“(()”進(jìn)入第四層函數(shù),left=2,right=1呼股,進(jìn)入第三個(gè)if耕魄,填一個(gè)右括號(hào)
“(())”進(jìn)入第五層函數(shù),left=2,right=2彭谁,進(jìn)入第一個(gè)if吸奴,結(jié)果壓入數(shù)組,返回第四層
str為“(()”缠局,返回第三層
str為“((”则奥,返回第二層
str為“(”,left=1,right=0狭园,進(jìn)入第三個(gè)if读处,填一個(gè)右括號(hào)
“()”進(jìn)入第三層,left=1,right=1唱矛,進(jìn)入第二個(gè)if罚舱,填一個(gè)左括號(hào)
“()(”進(jìn)入第四層,left=2,right=1绎谦,進(jìn)入第三個(gè)if管闷,填一個(gè)右括號(hào)
“()()”進(jìn)入第五層,left=2,right=2燥滑,進(jìn)入第一個(gè)if渐北,結(jié)果壓入數(shù)組,返回第四層
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;
};