leetcode第22题”Generate Parenthese”描述如下:
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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
看到题第一想法依然是使用递归,思路基本是这样的,在字符串长度增加的过程中,字符串中”{“的数量肯定要始终大于等于”}”的数量。
所以定义left和right两个变量方便计数,初试为n,当left等于right时,显然此时只能添加”{“,当left小于right时,两者都可以添加。结束条件为left和right都为0,同时由于left始终小于等于right,所以还要额外判断仅当left为0的情况,这种情况显然只能加”}”。
/**
* @param {number} n
* @return {string[]}
*/
var add = function(left, right, stack, s) {
if (left === 0 && right === 0) {
stack.push(s);
return;
}
if (left === right) {
add(left - 1, right, stack, s + "(");
} else if (left === 0) {
add(left, right - 1, stack, s + ")");
} else {
add(left - 1, right, stack, s + "(");
add(left, right - 1, stack, s + ")");
}
};
var generateParenthesis = function(n) {
var stack = [];
add(n, n, stack, "");
return stack;
};