c++ 当n=2时,这段代码如何生成“()()”?

2ul0zpep  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(150)
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。

mzsu5hc0

mzsu5hc01#

"()"之后,open是1,close是1,n是2。
它将输入:

if(open<n) {
    s+="(";
    solve(n,open+1,close,s,ans);
    s.pop_back();
}

有效地转到"()("。您应该能够从这里跟踪其余的。

相关问题