题目:
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:
string trace;
void generate_parenthesis_helper(int sum, int left_sum, int right_sum, vector<string>& result) {
if (left_sum == sum && right_sum == sum) {
result.push_back(trace);
return;
}
if (left_sum < sum) { //as long as left_sum < sum, always safe to generate '('
trace.push_back('(');
generate_parenthesis_helper(sum, left_sum + 1, right_sum, result);
trace.pop_back();
}
if (right_sum < left_sum) { //as long as right_sum < left_sum, we can generate ')'
trace.push_back(')');
generate_parenthesis_helper(sum, left_sum, right_sum + 1, result);
trace.pop_back();
}
}
vector<string> generateParenthesis(int n) {
vector<string> result;
generate_parenthesis_helper(n, 0, 0, result);
return result;
}
};