实现一个算法来打印所有有效(例如,正确打开和关闭)的 n 对括号组合。示例:输入:3(例如,3 对括号)输出:()()()、()(())、(())()、((()))
答案是 :
private static void printPar(int count)
{
char[] str = new char[count*2];
printPar(count,count,str, 0);
}
private static void printPar(int l, int r, char[] str, int count)
{
if(l < 0 || r < l)
return;
if (l ==0 && r == 0)
{
System.out.println(str);
}
else
{
if (l > 0 )
{
str[count] = '(';
printPar(l-1, r, str, count + 1);
}
if (r > 0)
{
str[count] = ')';
printPar(l, r-1, str, count + 1);
}
}
}
但是我并不完全理解这个解决方案,尽管有人声称这个解释很简单。(此代码工作正常)
在我看来,这段代码在有更多左括号时起作用,然后添加左括号。所以,只有((()))的条件,因为条件 if (l > 0 ) 出现在 r > 0 之前,所以,它应该总是先处理所有左边的。
但是这段代码如何处理这种情况“()(())”?我调试了这段代码,并在它打印出“((()))”之后发现。它去了l = 1,r = 3和str =“((()))”和count = 2的情况。这对我来说没有意义。
另外,如果有人可以解释什么是时间/空间复杂度,那对我来说会很有帮助。
提前致谢。