当前位置: 首页 > article >正文

代码随想录算法训练营第三十二天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数

题目链接:https://leetcode.cn/problems/fibonacci-number/description/
文档讲解:https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html
状态:已完成

思路:dp数组长度为n+1, d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i] = dp[i-1] + dp[i-2] dp[i]=dp[i1]+dp[i2] d p [ 0 ] = 0 , d p [ 1 ] = 1 dp[0] = 0, dp[1] = 1 dp[0]=0,dp[1]=1
时间复杂度: O ( N ) O(N) O(N);空间复杂度: O ( N ) O(N) O(N)

class Solution {
    public int fib(int n) {
        if(n <= 1)
            return n;

        int[] dp = new int[n+1];
        dp[0] = 0;
        dp[1] = 1;

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

        return dp[n];        
    }
}

70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/description/
文档讲解:https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF.html
状态:已完成

思路:dp[i]表示到达第i个台阶的方法数量

  • d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i] = dp[i-1] + dp[i-2] dp[i]=dp[i1]+dp[i2]
  • d p [ 0 ] = 1 , d p [ 1 ] = 1 dp[0] = 1, dp[1] = 1 dp[0]=1,dp[1]=1

时间复杂度: O ( N ) O(N) O(N);空间复杂度: O ( N ) O(N) O(N)

// dp[i]表示到达第i个台阶的方法数量
// dp[i] = dp[i-1] + dp[i-2]
// dp[0] = 1, dp[1] = 1

class Solution {
    public int climbStairs(int n) {
        if(n == 1)
            return 1;
        
        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;

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

746. 使用最小花费爬楼梯

题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/description/
文档讲解:https://programmercarl.com/0746.%E4%BD%BF%E7%94%A8%E6%9C%80%E5%B0%8F%E8%8A%B1%E8%B4%B9%E7%88%AC%E6%A5%BC%E6%A2%AF.html
状态:已完成

思路:dp[i] 到达第i个台阶的最低花费

  • d p [ i ] = m i n ( d p [ i − 1 ] + c o s t [ i − 1 ] , d p [ i − 2 ] + c o s t [ i − 2 ] ) dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]) dp[i]=min(dp[i1]+cost[i1],dp[i2]+cost[i2])
  • d p [ 0 ] = 0 , d p [ 1 ] = 0 dp[0] = 0, dp[1] = 0 dp[0]=0,dp[1]=0
  • 此处的dp[0]是第一层台阶下面一层,没有实际含义,不要纠结这点

时间复杂度: O ( N ) O(N) O(N);空间复杂度: O ( N ) O(N) O(N)

// dp[i] 到达第i个台阶的最低花费
// dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2])
// dp[0] = 0
// dp[1] = 0

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        if(n <= 1)
            return 0;

        int[] dp = new int[n+1];
        for(int i=2;i<=n;i++)
            dp[i] = Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);

        return dp[n];
    }
}

http://www.kler.cn/a/591859.html

相关文章:

  • 【第15届蓝桥杯】软件赛CB组省赛
  • 3 C#调用visionPro的toolblock的步骤
  • Redis——事务实现以及应用场景
  • Linux下使用cgroup限制进程IO
  • 【Godot】CanvasItem
  • 神经外科手术规划的实现方案及未来发展方向
  • vue 获取当前时间并自动刷新
  • Spring 创建bean的流程
  • java项目40分钟后token失效问题排查(40分钟后刷新页面白屏)
  • 20242817李臻《Linux⾼级编程实践》第四周
  • [spring]集成junit
  • 在 Vue 项目中引入静态图片有多种方式
  • 从Excel到搭贝的转变过程
  • VSTO(C#)Excel开发13:实现定时器
  • 【模拟面试】计算机考研复试集训(第八天)
  • 免费看付费电影网站制作,高清电影集合搜索引擎网站
  • 【Json-RPC框架】:Json::CharReader,parse函数反序列化的返回值
  • sparksql的Transformation与 Action操作
  • Redis 小记
  • LeetCode[42] 接雨水