我一直在尝试解决代码工作室的“忍者训练问题”。
问题是:
Ninja 正在计划这个“N”天的训练计划。每天,他可以进行这三项活动中的任何一项。 (跑步、格斗练习或学习新动作)。每项活动每天都有一些功绩点。由于 Ninja 必须提高他所有的技能,他不能连续两天做同样的活动。你的任务是计算忍者可以获得的最大功德点数。
3
[10 40 70]
[20 50 80]
[30 60 90]
O/P: 210
约束: 1<=N<=10000 1<=A[i]<=100
我的代码: 递归+记忆。
public static int helper(int rowi, int coli, int points[][], int n, int[][] dp){
if(rowi>=n || coli>3) return 0;
//
if(dp[rowi][coli]!=-1) return dp[rowi][coli];
int max=0;
for(int i=0; i<3; i++){
if(i!=coli){
int val=points[rowi][i]+helper(rowi+1, i, points, n, dp);
max=Math.max(max, val);
}
}
return dp[rowi][coli]= max;
}
司机代码:
public static int ninjaTraining(int n, int points[][]) {
// Write your code here..
int[][] dp=new int[n][4];
for(int[] a: dp) Arrays.fill(a, -1);
return helper(0, 3, points, n, dp);
}
幸运的是,我的代码通过了 11 个测试用例中的 9 个。但是,它在递归调用中抛出“StackOverFlow 错误”。我尝试了所有方法来消除错误。请帮我解决这个问题。
错误:
Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper( Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20)在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution.java:20) 在 Solution.helper(Solution .java:20) 在 Solution.helper(Solution.java:20)