LeetCode:509. 斐波那契数 && 70. 爬楼梯 && 746. 使用最小花费爬楼梯

这篇具有很好参考价值的文章主要介绍了LeetCode:509. 斐波那契数 && 70. 爬楼梯 && 746. 使用最小花费爬楼梯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

509. 斐波那契数

题目

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。
LeetCode:509. 斐波那契数 && 70. 爬楼梯 && 746. 使用最小花费爬楼梯

动态规划

class Solution {
    public int fib(int n) {
        // 题目条件n > 1
        if(n <= 1) return n;
        int[] dp = new int[n + 1];
        // dp数组初始化
        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) {
        if(n < 2) return n;
        int a = 0, b = 1, c = 0;
        for(int i = 2; i <= n; i++){
            c = a + b;
            a = b;
            b = c;
        }
        return b;
    }
}

递归

class Solution {
    public int fib(int n) {
        // 题目条件n > 1
        if(n <= 1) return n;
        return fib(n - 1) + fib(n - 2);
    }
}

70. 爬楼梯

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
LeetCode:509. 斐波那契数 && 70. 爬楼梯 && 746. 使用最小花费爬楼梯

动态规划

class Solution {
    public int climbStairs(int n) {
        if(n <= 0) return n;
        int[] dp = new int[n + 1];
        // dp数组初始化
        dp[0] = 1;
        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 climbStairs(int n) {
        int[] dp = new int[n + 1];
        // m表示一次性可以走两个台阶
        int m = 2;
        dp[0] = 1;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                if(i - j >= 0) dp[i] += dp[i - j];
            }
        }
        return dp[n];
    }
}

方法

class Solution {
    public int climbStairs(int n) {
        if(n <= 2) return n;
        int a = 1, b = 2, c = 0;
        for(int i = 3; i <= n; i++){
            c = a + b;
            a = b;
            b = c;
        }
        return b;
    }
}

746. 使用最小花费爬楼梯

题目

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
LeetCode:509. 斐波那契数 && 70. 爬楼梯 && 746. 使用最小花费爬楼梯文章来源地址https://www.toymoban.com/news/detail-454402.html

动态规划(站在楼梯上不支付费用)

class Solution {
    // 思路:每走一步计算花费的最小值
    public int minCostClimbingStairs(int[] cost) {
        int[] dp = new int[cost.length + 1];
        // dp初始化
        /**
            可以从0或1的台阶开始爬楼梯
            站在台阶上并不需要花费
            只有要爬楼梯时才需要花费下标对应的值
         */
        dp[0] = 0;
        dp[1] = 0;
        // 遍历顺序
        for(int i = 2; i <= cost.length; i++){
            // 递推公式
            // 爬楼梯的位置+对应花费的值,取最小花费
            dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
        }
        return dp[cost.length];
    }
}

动态规划(站在楼梯上并支付费用)

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int[] dp = new int[cost.length];
        // dp初始化
        // 站在台阶上,并且支付了对应的费用
        dp[0] = cost[0];
        dp[1] = cost[1];
        for(int i = 2; i < cost.length; i++){
            // 递推公式
            // 已经在原本的台阶上支付了费用,所以只需要支付下一个台阶的费用即可
            dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];
        }
        // 计算最后一步,在倒数一个台阶和倒数两个台阶中取最小费用
        return Math.min(dp[cost.length - 1], dp[cost.length - 2]);
    }
}

到了这里,关于LeetCode:509. 斐波那契数 && 70. 爬楼梯 && 746. 使用最小花费爬楼梯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法随想录第三十八天打卡| 理论基础 , 509. 斐波那契数, 70. 爬楼梯 , 746. 使用最小花费爬楼梯

     理论基础  无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。  如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了?  其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!   如果

    2024年01月18日
    浏览(32)
  • 算法刷刷刷|动态规划篇|509.斐波那契数| 70.爬楼梯| 746.使用最小花费爬楼梯| 62.不同路径| 63不同路径2| 343.正数拆分 | 96.不同的二叉搜索树

    509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n 1 给定 n ,请计算 F(n) 。 70.爬楼梯 746.使用最小花费爬楼梯 给你一个整数

    2023年04月23日
    浏览(45)
  • 代码随想录Day32 动态规划01 LeetCodeT509 斐波那契数列 T70 爬楼梯 T746 爬楼梯的最小消耗

    动态规划首先可以解决的问题有背包问题,打家劫舍问题,股票问题,子序列问题等,主要是将一个大的问题切分成多个重叠的子问题,所以动态规划一定是上一个状态递推过来的,有一个重要的 状态转移方程, 但是这也并不是解题的全部,我们将动态规划的题目基本分为五步来完成

    2024年02月06日
    浏览(44)
  • LeetCode 509 斐波那契数(动态规划)

     509. 斐波那契数 - 力扣(LeetCode)   斐波那契数  (通常用  F(n)  表示)形成的序列称为  斐波那契数列  。该数列由  0  和  1  开始,后面的每一项数字都是前面两项数字的和。也就是: 给定  n  ,请计算  F(n)  。 【思路】动态规划 动规五部曲: 1.确定dp数组以及下

    2024年02月07日
    浏览(43)
  • 【leetcode】509. 斐波那契数(easy)

    斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n 1 解答 :

    2024年02月13日
    浏览(29)
  • LeetCode刷题笔记【29】:动态规划专题-1(斐波那契数、爬楼梯、使用最小花费爬楼梯)

    动态规划(DP,Dynamic Programming)。 其解题思路对比 贪心算法的“直接选局部最优然后推导出全局最优” ;倾向于“ 由之前的结果推导得到后续的结果 ”。 很多时候二者具有相似性,不必死扣概念。 动态规划题目的核心是dp数组的概念和构建(递推公式); 所以具体的解题步骤

    2024年02月09日
    浏览(29)
  • 数据结构与算法之动态规划: Leetcode 509. 斐波那契数 (Typescript版)

    斐波那契数 https://leetcode.cn/problems/fibonacci-number/ 描述 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: 给定 n ,请计算 F(n) 。 示例 1 示例 2 示例 3 提示 0 = n = 30 算法实现 1 )方案 1 这

    2024年02月04日
    浏览(34)
  • 力扣 509. 斐波那契数

    题目来源:https://leetcode.cn/problems/fibonacci-number/description/    C++题解1:根据题意,直接用递归函数。 C++题解2(来源代码随想录):动态规划。动规五部曲:这里我们要用一个一维dp数组来保存递归的结果。 确定dp数组以及下标的含义:dp[i]的定义为第i个数的斐波那契数值是

    2024年02月15日
    浏览(28)
  • 509. 斐波那契数

    斐波那契数  (通常用  F(n)  表示)形成的序列称为  斐波那契数列  。该数列由  0  和  1  开始,后面的每一项数字都是前面两项数字的和。也就是: 给定  n  ,请计算  F(n)  。 示例 1: 示例 2: 示例 3: 提示: 0 = n = 30

    2024年02月06日
    浏览(30)
  • 动态规划之 509斐波那契数(第1道)

    题目: 斐波那契数 (通常用  表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: , ,其中 n 1 给定 n ,请计算 。 题目链接:509. 斐波那契数 - 力扣(LeetCode) 示例: 解法:

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包