- 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
思路:这题首先想到的是dfs,但是没想到怎么做,参考了答案
end condition:
右大于左,右越界,左越界
学习:vector不像python的可变变量,以值拷贝传入时,等于是深度拷贝,想要函数内外一起变采用引用传参。
class Solution {
public:
void Helper(vector<string> &res, string cur, int n, int left, int right);
vector<string> generateParenthesis(int n) {
// dfs
vector<string> res;
Helper(res, "", n, 0, 0);
return res;
}
};
void Solution::Helper(vector<string> &res, string cur, int n, int left, int right) {
// end condition
if (right > left || right > n || left >n) {
return;
}
if (right == n && left == n ) {
res.push_back(cur);
return;
// for test
// cout << cur << endl;
}
Helper(res, cur + '(', n, left + 1, right);
Helper(res, cur + ')', n, left, right + 1);
}