//用idea运行,当n = 48时,结果为-811192543。面试或机试时会被判错吗
class Solution {
public static int climbStairs(int n) {
int[] dp = new int[n + 1];
dp[0] = 1; dp[1] = 1;
for(int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
public static void main(String[] args) {
System.out.println(climbStairs(48));
}
}

n = 48面试或机试时会被判错吗? dp数组为什么是 n + 1
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 天际的海浪 2021-02-09 21:40关注
n = 48时,结果为-811192543 是int型数值范围溢出了。
单从程序执行结果上来说这个结果是对的。
但从解题逻辑算法上来说这个结果就是错误的。因为程序员在写解题算法时不太可能有意的利用数值范围溢出这类特性。因为数组元素的下标是从0开始的,
比如n = 5,在声明数组时int[] dp = new int[n]; 就是声明有5个元素的数组。
这5个元素的下标分别是 dp[0] dp[1] dp[2] dp[3] dp[4],没有dp[5]。
如果希望数组中有dp[5],就要 new int[n+1]声明数组中有6个元素
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报