实现一个算法来打印 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);
}
}
}
但我不太完全理解这个解决方案,尽管有人声称解释足够简单。 (这段代码工作正常)
在我看来,这段代码的工作原理是当有更多左括号时,然后添加左括号。所以,只有((()))的条件因为条件
如果 (l > 0 )
出现在 r > 0 之前,因此,它应该始终首先处理所有左边的。
但是这段代码如何处理这种情况“()(())”呢?我调试这段代码,发现它打印出“((()))”。它出现了 l =1、r =3、str="((()))" 和 count = 2 的情况。这对我来说没有意义。
另外,如果有人可以解释什么是时间/空间复杂度,那对我会有很大帮助。
提前致谢。