week7-leetcode #22-GenerateParentheses
题目地址: https://leetcode.com/problems/generate-parentheses/description/
Question
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example
given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
Solution
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> vec_out;
recursiveParenthesis(n, n, "", vec_out);
return vec_out;
}
void recursiveParenthesis(int left, int right, string out, vector<string> &vec_out) {
// 如果右边括号过多,直接返回
if (left > right) return;
if (left == 0 && right == 0)
vec_out.push_back(out);
if (left > 0)
recursiveParenthesis(left-1, right, out+"(", vec_out);
if (right > 0)
recursiveParenthesis(left, right-1, out+")", vec_out);
}
};
思路
考虑使用递归算法。
(1)如果剩余左边的括号大于有右边的括号,说明右边的括号多于左边的括号,无法进行匹配。
(2)如果剩余左右括号为0,说明括号达到了要求的数量,停止递归。
(3)如果左边或者右边剩余的括号大于0,递归生成左括号或右括号。