//用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时,结果为-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个元素
都出来负数了,已经内存溢出了。。bp[n+1],是存了n+1个数,bp[0]可能只是为了下面计算方便,添加了一个
只要数值够大肯定会溢出的,就算设置成double也一样会