g********n 发帖数: 447 | 1 就是打印出成对的括号,比如()(),(()).
我的code是这样,可是结果总是不对,请帮忙看看哪里有问题?谢谢
public void printbrackets(int l, int r, int count){
if(l==count && r==count){
System.out.println("\n");
return;
}
if(l
System.out.print("(");
printbrackets(l+1, r, count);
}
if(r
System.out.print(")");
printbrackets(l, r+1, count);
}
}
void main(){
printbrackets(0,0,2);
} | f********4 发帖数: 988 | 2 如果L是1,R是2,这种是不可以的,貌似没有filter掉,你看看是不是。。。 | d**e 发帖数: 6098 | 3 问题在于用了print,这个不是print结果,而只是在执行过程中print,但同一个print
完就不会print第二次。比如print("(")在print完\n后就不会print第二次。
应该将结果存起来,在你print("\n")那里print完整结果。
public void printbrackets(int l, int r, int count, String result) {
if (l == count && r == count) {
System.out.println(result);
return;
}
if (l < count) {
printbrackets(l + 1, r, count, result + "(");
}
if (r < l) {
printbrackets(l, r + 1, count, result + ")");
}
}
call printbracket(0, 0, n, "")
【在 g********n 的大作中提到】 : 就是打印出成对的括号,比如()(),(()). : 我的code是这样,可是结果总是不对,请帮忙看看哪里有问题?谢谢 : public void printbrackets(int l, int r, int count){ : if(l==count && r==count){ : System.out.println("\n"); : return; : } : if(l: System.out.print("("); : printbrackets(l+1, r, count);
| g********n 发帖数: 447 | 4 这样子,我改了一下,结果正确了,谢谢你。
print
【在 d**e 的大作中提到】 : 问题在于用了print,这个不是print结果,而只是在执行过程中print,但同一个print : 完就不会print第二次。比如print("(")在print完\n后就不会print第二次。 : 应该将结果存起来,在你print("\n")那里print完整结果。 : public void printbrackets(int l, int r, int count, String result) { : if (l == count && r == count) { : System.out.println(result); : return; : } : if (l < count) { : printbrackets(l + 1, r, count, result + "(");
| g********n 发帖数: 447 | 5 恩,这个special case也没有考虑到。
【在 f********4 的大作中提到】 : 如果L是1,R是2,这种是不可以的,貌似没有filter掉,你看看是不是。。。
| l***e 发帖数: 303 | 6 直接给if(r
void printbrackets(int l, int r, int count){
if(l==count && r==count){
printf("\n");
return;
}
if(l
printf("(");
printbrackets(l+1, r, count);
}
else if(r
printf(")");
printbrackets(l, r+1, count);
}
}
print
【在 d**e 的大作中提到】 : 问题在于用了print,这个不是print结果,而只是在执行过程中print,但同一个print : 完就不会print第二次。比如print("(")在print完\n后就不会print第二次。 : 应该将结果存起来,在你print("\n")那里print完整结果。 : public void printbrackets(int l, int r, int count, String result) { : if (l == count && r == count) { : System.out.println(result); : return; : } : if (l < count) { : printbrackets(l + 1, r, count, result + "(");
| d**e 发帖数: 6098 | 7 这样似乎不行,因为当有了第一个“(”的时候,“(”和“)”是并存的case,不应
该用else if.
【在 l***e 的大作中提到】 : 直接给if(r: void printbrackets(int l, int r, int count){ : if(l==count && r==count){ : printf("\n"); : return; : } : if(l: printf("("); : printbrackets(l+1, r, count); : }
|
|