我遇到了括号组合编码问题,以及可能的解决方案搜索,如下所示,
void Ans(int open,int close,string output)
{
if(open == 0 && close == 0)
{
cout<<output<<"\n";
return;
}
if(open)
Ans(open-1,close,output+"(");
if(open<close)
Ans(open,close-1,output+")");
}
int main()
{
int n=2;
Ans(n,n,"");
return 0;
}问题:上面的代码如何调用第二个括号模式。我可以打开第一行,如果是n=2或更多,那么它是如何触发第二行模式的。
--编辑,n=2,输出是,
(()) ()()
现在,第一行(())具有调用堆栈的意义,但是,如何启动第二行模式组合,它在打印第一行(()) cout<<output<<"\n"; return;时已经是return了。
发布于 2020-01-17 14:31:54
您有递归调用。
Ans(2, 2, "");调用只有Ans(1, 2, "(");Ans(1, 2, "(");调用Ans(0, 2, "(("); (第一个模式)和Ans(1, 1, "()"); (第二个pattern).Ans(0, 2, "((");调用Ans(0, 1, "(()");,然后递归调用Ans(0, 0, "(())"); ),(displayed)Ans(1, 1, "()");调用Ans(0, 1, "()(");,递归调用Ans(0, 0, "()()"); (显示)https://stackoverflow.com/questions/59789210
复制相似问题