在写leetcode第22题,括号生成时,发现方法中的变量不能使用自减(--)否则报错或异常
必须把方法中改成-1,才可以运行,不知道是什么原因,还是特性,只是很好奇
报错内容 Exception in thread "main" java.lang.StackOverflowError
at java.base/java.lang.invoke.StringConcatFactory$MethodHandleInlineCopyStrategy.newArray(StringConcatFactory.java:1605)
想知道是什么原因
视频中的代码是看b站上学习的 up EdwardShi,hot100中的第22题
错误的代码
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
int n = 3;
List<String> res = new ArrayList<>();
if (n == 0) {
return ;
}
helper(res, " ", n, n);
System.out.println(res);
}
public static void helper(List<String> res, String s, int left, int right) {
if (left > right) {
return;
}
// 当左右需要输出括号的值都为0时就代表全部添加完
if (left == 0 && right == 0) {
res.add(s);
return;
}
if (left > 0) {
helper(res, s + "(", left--, right);
}
// 在两个if里helper方法中,变量不能自减(--)否则会异常,在leetcode提交是超出内存限制
if (right > 0) {
helper(res, s + ")", left, right--);
}
}
}