问题
题目:[Generate Parentheses]
思路
卡特兰数的思路。 任意时刻左括号的数量要多于右括号。 我的思路也很简单,那就是每一位挨个试探就好了。 搜索的思路。
至于参数传递,我没有选择引用。而是值传递,这一块我不是很熟。 传递引用后面要将变化改回来。
代码
class Solution {
public:
vector<string> generateParenthesis(
int n) {
std::
vector<std::string> ret;
std::
string s(
2*n,
' ');
dfs(s,
0, n,
0,
0, ret);
return ret;
}
private:
void dfs(
std::
string s,
int depth,
int n,
int cnt_left,
int cnt_right,
std::
vector<std::string>& ret){
if(depth ==
2*n) ret.push_back(s);
else{
if( cnt_left < n && cnt_left >= cnt_right ){
s[depth] =
'(';
dfs( s, depth +
1, n, cnt_left +
1, cnt_right, ret );
}
if( cnt_right < n && cnt_right < cnt_left ){
s[depth] =
')';
dfs( s, depth +
1, n, cnt_left, cnt_right +
1, ret );
}
}
}
};
转载请注明原文地址: https://ju.6miu.com/read-25795.html