剑指10斐波那契数列,青蛙跳台阶

本文介绍了使用动态规划方法解决斐波那契数列和青蛙跳台阶问题。通过定义状态、转移方程、初始条件和计算顺序,给出了简洁的代码实现。动态规划在这两个经典问题中展示了其高效且易于理解的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

斐波那契数列

描述:

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。

思路:

动规4步
(1)确定状态:最后一步,对于第n的数来说,就是前两个数之和
(2)转移方程:从2开始每个数都是前两个数之和
F[n]=F[n-1] + F[n-2]
(3)初始条件:0个数就是0,1是1(0和1没有前两个数)数组长度为n+1,(下标从0开始,考虑第n项,i<=n)
(4)计算顺序:每一步用前一步的值,所以从前往后

代码:

class Solution {
    public int fib(int n) {
        if(n == 0) return 0;
        int[] arr = new int[n+1];
        arr[0] = 0;
        arr[1] = 1;
        for(int i = 2; i <= n; i++){
            arr[i] = arr[i-1] + arr[i-2];
            arr[i] %= 1000000007;
        }
        return arr[n];

    }
}

青蛙跳台阶

描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

思路:

动规4步:
(1)确定状态:最后一步,两种情况,在前一阶一次跳一个,在前两阶一次跳两个
(2)转移方程:从第三阶开始每一阶都是上两阶跳法的和
F[i] = F[i-1] + F[i-2];
(3)初始条件:考虑第0台阶为1,第1个台阶是1.第2个台阶是2。
数组长度为n+1(数组充0开始,i代表第1台阶,n需要考虑,i<=n)
(4)计算顺序:每一阶都需要前面的结果,所以从前往后

代码:
 

class Solution {
    public int numWays(int n) {
        if(n == 0 || n == 1) return 1;

        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        dp[2] = 2;
        for(int i = 3; i <= n; i++ ){
            dp[i] = dp[i-1] + dp[i-2];
            dp[i] %= 1000000007;
        }
        return dp[n];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DU777DU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值