题目: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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
给出一个整数,打印出符合栈操作的左右对应的括号串。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
if (n > 0)
generate(n, n, "", result);
return result;
}
void generate(int left, int right, string s, vector<string> &result) {
if (left ==0 && right == 0) {
result.push_back(s);
}
if (left > 0) {
generate(left-1, right, s + '(', result);
}
if (right > 0 && left < right) {
generate(left, right-1, s + ')', result);
}
}
};
递归求解。
剩下的右括号肯定是不小于左括号数目的。
如果左括号还有剩下,就返回添加左括号的情况;
如果右括号还有剩下,且左括号数目小于右括号,返回添加右括号的情况;
2种括号都没有了,说明整个串生成。