leetcode解题报告22. Generate Parentheses
难度是medium
题目描述
给定一个整数n,代表左括号的个数,要求返回左括号数为n的所有合法的括号组合字符串。
我的思路
题目直观来看比较简单,我们可以方便地利用stack的后进先出来判断合法的括号字符串,生成一个合法的括号字符串也比较简单。但是难点在于要遍历生成
所有合法的括号字符串,并返回。其实可以发现生成一个合法的括号字符串,每一步在于选择是进栈还是出栈,每一个不同的选择都会导致不同括号字符串生成。这样我们可以采取递归的方式,一次生成过程包括所有可能性,从而得到所有合法的括号字符串。
我的代码
class Solution {
public:
vector<string> generateParenthesis(int n) {
string s;
vector<string> result;
func(result, n, 0, s);
return result;
}
void func(vector<string>& result, int remain, int stack, string s) {
if (stack > 0) {
func(result, remain, stack-1, s+')');
}
if (remain > 0) {
func(result, remain-1, stack+1, s+'(');
}
if (stack == 0 && remain==0) {
result.push_back(s);
}
}
};
阅读官方题解
没有官方题解。
思想核心总结
对用循环不太好解决的问题,可以考虑试一下递归的方法。