剑指OfferJZ9变态跳台阶(JavaScript:动规)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:594993
本题知识点: 贪心

题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
示例1
输入
3

返回值
4

思路:
在这里插入图片描述
从1台阶可以直接跳到4(即dp[1]),2台阶可以直接跳到4(即dp[2]),3也可以(即dp[3]),所以,dp[3]+dp[2]+dp[1],从底层也可以到4,所以最后+1。
所以跳到4,总共为 dp[4] = dp[3]+dp[2]+dp[1]+1 = ( dp[2]+dp[1]+1 ) + dp[2] + dp[1] +1=8

如果还不理解,可以理解为在最下面垫多一个台阶

function jumpFloorII(number) {
    
    
    let dp = new Array(number + 1).fill(1) //初始化为1,因为从底层都可以直接跳到
    dp[1] = 1
    dp[2] = 2
    for (let i = 3; i <= number; i++) {
    
    
        for (let j = 1; j < i; j++) {
    
    
            dp[i] += dp[j]
        }
    }
    return dp[number]
}

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/114533734