【发布时间】:2019-06-16 19:47:19
【问题描述】:
hacker earth 上也有类似的编码问题。挑战现在结束。我现在没有这个问题,但我的代码看起来像这样。我通过了测试用例,但由于输入过多而导致我的代码不被接受,这会导致此错误。 我写了以下代码。
import java.util.*;
class TripleStep{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=10000;
long[] memo=new long[n+1];
Arrays.fill(memo,-1);
long ans=StairOpr(n,memo);
Arrays.fill(memo,-1);
System.out.println(ans);
}
public static long StairOpr(int n,long[] memo){
if(n<0){
return 0;
}
else if(n==0){
return 1;
}
else if(n==1){
return 2;
}
else if(n==2){
return 3;
}
else if(memo[n]>-1){
return memo[n];
}
else
memo[n]= (StairOpr(n-1,memo)%1000000007+StairOpr(n-2,memo)%1000000007+StairOpr(n-3,memo)%1000000007+n*n*(n+1)%1000000007)%1000000007;
return memo[n];
}
}
对于输入值 10000,代码给了我以下错误。
Exception in thread "main" java.lang.StackOverflowError
at TripleStep.StairOpr(TripleStep.java:31)
at TripleStep.StairOpr(TripleStep.java:31)
原因是什么,解决办法是什么?由于我编写了动态编程代码,但由于错误,答案未提交,我面临拒绝。
【问题讨论】:
-
这个
%1000000007应该做什么?你输入什么值作为n? -
结果应该是1000000007的模数,输入值为10000
-
是的,我知道
%做了什么,但是期望得到什么值来证明这一点?为什么你希望你的内存支持 10000 次递归方法调用?您是否正确配置了堆栈? -
显然没有,或者你不会在这里问这个问题。它甚至没有那么难。由于输入值较大,您的代码执行了过多的递归调用。你不能用递归做所有事情,所以是时候使用不同的方法了。
-
也许可以用这个 long[] dp=new long[n+1]; dp[0]=1; dp[1]=2; dp[2]=3; for(int i=3;i
标签: java algorithm data-structures stack dynamic-programming