void solve(int n,int open,int close,string s,vector<string>&ans) {
if(open==close && close==n) {
ans.push_back(s);
return;
}
if(open<n) {
s+="(";
solve(n,open+1,close,s,ans);
s.pop_back();
}
if(open>close) {
s+=")";
solve(n,open,close+1,s,ans);
s.pop_back();
}
}
vector<string> generateParentheses(int n) {
vector<string> ans;
solve(n,0,0,"",ans);
return ans;
}
这段代码生成了给定值n的所有可能的parantheses排列。当n=2时,我可以轻松地空运行代码并到达输出“(())"。但我真的不明白它是如何到达“()()"的。
我卡住的地方是“()"。代码不能关闭括号,直到左括号的编号等于n。
1条答案
按热度按时间mzsu5hc01#
在
"()"
之后,open
是1,close
是1,n
是2。它将输入:
有效地转到
"()("
。您应该能够从这里跟踪其余的。