代码随想录 Day-25

力扣题目 509.斐波那契数

思路

  • 很理所当然的,可以使用递归的方式
  • 其次是用动态规划的方式,动态规划的核心就是递推公式。

1、递归

class Solution {
    //递归第一步:确定传入参数和返回值
    public int fib(int n) {
        //递归第二步:确定终止结果
        if(n == 0)
            return 0;
        
        if(n == 1)
            return 1;

        //递归第三步:确定单层递归的逻辑
        return fib(n-1) + fib(n-2);

    }
}

2、动态规划

动态规划五部曲:

  1. 确定dp数组以及下标的含义——第i个数的斐波那契数值是dp【i】
  2. 确定递推公式——dp【i】 = dp【i-1】+ dp【i-2】
  3. dp数组的初始化——dp【0】 = 0;dp【1】=1;
  4. 确定遍历顺序——从公式可以看出,数组dp的 i 依赖于前面的 i-1 和 i-2 ,所以从前往后顺序
  5. 打印数组——就是我们自己来举例模拟debug自己的代码是否正确
//非压缩版本
class Solution {
    public int fib(int n) {
        int[] dp = new int[n+1];

        if(n <= 1){
            return n;
        }
        else{
            dp[0] = 0;
            dp[1] = 1;

            for(int i=2; i<=n; i++){
                dp[i] = dp[i-1] + dp[i-2];
            }
        }

        return dp[n];
    }
}
//压缩版本
class Solution {
    public int fib(int n) {
        //int[] dp = new int[n+1];

        if(n <= 1){
            return n;
        }
        else{
            //dp[0] = 0;
            //dp[1] = 1;

            int a=0, b=1, sum=0;    //可以理解为a是i-2,b是i-1,sum是i

            for(int i=2; i<=n; i++){
                //dp[i] = dp[i-1] + dp[i-2];
                sum = a+b;
                a = b;
                b = sum;
            }

            return sum;
        }

        //return dp[n];
    }
}


力扣题目  746.使用最小花费爬楼梯

思路

  1. dp数组的含义——到达i位置时,花费的体力dp【i】
  2. 确定递推公式——因为 i 是由 i-1 或者 i-2 来得到的,所以 i = (i-1 + cost) 与 (i-2 + cost) 的最小的哪一个
  3. 确定初始值——因为直接从该位置起来不用花费体力,dp1 = 0;dp0 = 0
  4. 确定遍历顺序—— 因为 i 是由 i-1 或者 i-2  推理出来的,所以由前往后遍历
  5. 打印数组

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int length = cost.length;
        int[] dp = new int [length + 1];    //这里+1是因为这个下标才是楼顶

        //因为第一步直接从0或1开始,不用花费
        dp[0] = 0;
        dp[1] = 0;

        //由提示可以看出,楼顶至少是下标为2
        for(int i=2; i <= length; i++){
            dp[i] = Math.min(dp[i-1] + cost[i-1],
                            dp[i-2] + cost[i-2]);
        }

        return dp[length];

    }
}

相关推荐

  1. 代码随想day21

    2024-04-01 09:06:02       31 阅读
  2. 代码随想day24

    2024-04-01 09:06:02       25 阅读
  3. 代码随想Day24

    2024-04-01 09:06:02       21 阅读
  4. 代码随想Day27

    2024-04-01 09:06:02       18 阅读
  5. 代码随想Day29

    2024-04-01 09:06:02       21 阅读
  6. 代码随想day27

    2024-04-01 09:06:02       16 阅读
  7. 代码随想day24

    2024-04-01 09:06:02       22 阅读
  8. 代码随想Day28

    2024-04-01 09:06:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 09:06:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 09:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 09:06:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 09:06:02       20 阅读

热门阅读

  1. ROS2 学习(文章链接汇总)

    2024-04-01 09:06:02       18 阅读
  2. 数据仓库——聚集

    2024-04-01 09:06:02       16 阅读
  3. 2024/3/31学习总结

    2024-04-01 09:06:02       15 阅读
  4. C# 文件

    2024-04-01 09:06:02       17 阅读
  5. leetcode 316. 去除重复字母

    2024-04-01 09:06:02       14 阅读
  6. HTML 怎么解决上下标问题呢?

    2024-04-01 09:06:02       18 阅读
  7. 飞书裁员提供补偿方案或者转岗机会

    2024-04-01 09:06:02       28 阅读
  8. ubuntu如何升级Cmake

    2024-04-01 09:06:02       24 阅读
  9. Github 2024-03-31 php开源项目日报 Top10

    2024-04-01 09:06:02       17 阅读