老师好,我在用数组做动态规划算法题时,遇到个问题:
问题是爬楼梯的算法问题:
https://leetcode-cn.com/problems/climbing-stairs/
代码如下:
class Solution {
    public int climbStairs(int n) {
        if(n<=0) return 0;
        if(n==1) return 1;
        if(n==2) return 2;
        int[] dp = new int[n];
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
        
    }
}我的问题在第六行,在初始化数组时,因为for循环i到n就截止了,因此dp的最后条件是:
dp[n]=dp[n-1]+dp[n-2];
因此第六行创建初始化数组,我认为数组长度为n就够了,但是这里会出现 out of bounds的超出边界问题。
这里应该是初始化一个n+1 长度的数组,但是这里我不懂为什么会超出边界呢?谢谢