22.Generate Parentheses
Description
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,生成n对括号的所有合法排列。
Solution
有点类似长度为n的不重复数组的所有合法入栈出栈次序。若要合法(匹配),则第1到2n个位置都满足如下规则:左括号的个数大于等于右括号的个数。当剩余left > 0,可以直接打印左括号,不会出错;若left >= right,我们不能打印右括号;当left和right都为0,说明一个合法序列已经生成。
利用递归解决。
Complexity analysis
略。
Code
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
string temp = "";
int left = n;
int right = n;
generate(left, right, temp, result);
return result;
}
void generate(int left, int right, string res, vector<string> &result) {
if (left == 0 && right == 0) {
result.push_back(res);
}
if (left > 0) {
generate(left - 1, right, res+'(', result);
}
if (left < right && right > 0) {
generate(left, right-1, res+')', result);
}
}
};