力扣爆刷第126天之动态规划五连刷(斐波那契、爬楼梯、不同路径)

server/2024/9/23 6:41:12/

力扣爆刷第126天之动态规划五连刷(斐波那契、爬楼梯、不同路径)

文章目录

      • 力扣爆刷第126天之动态规划五连刷(斐波那契、爬楼梯、不同路径)
      • 一、509. 斐波那契数
      • 二、70. 爬楼梯
      • 三、746. 使用最小花费爬楼梯
      • 四、62. 不同路径
      • 五、63. 不同路径 II

一、509. 斐波那契数

题目链接:https://leetcode.cn/problems/fibonacci-number/description/
思路:斐波那契数,具有很明显的动态规划的性质,状态转移方程就是斐波那契的运算公式,每一个元素都依赖于前两个元素,从而确定递推公式。

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 c;}
}

二、70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/description/
思路:本题的解法和斐波那契一模一样,问爬楼梯有多少种不同的方法,因为步长只有1步和2步,那么到达第N阶,可以从第N-1阶走1步,也可以从第N-2阶走2步,那么达到第N阶的方法数,就是第N-1阶的方法数+第N-2阶的方法数。
dp[i] = dp[i-1] + dp[i-2]

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

三、746. 使用最小花费爬楼梯

题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/description/
思路:花费最小代价爬楼梯,每次只能爬1步或者2步,定义dp[i]表示到达nums[i]时所花费的最小值,故状态转移方程为dp[i] = nums[i]+Math.min(dp[i-1], dp[i-2])。初始化dp[0]=nums[0],dp[1]=nums[1]。最后的结果为倒数两个位置的最小值,因为倒数第二位可以走走两步越过终点。

class Solution {public int minCostClimbingStairs(int[] cost) {int a = cost[0], b = cost[1], c = b;for(int i = 2; i < cost.length; i++) {c = cost[i] + Math.min(a, b);a = b;b = c;}return Math.min(a, b);}
}

四、62. 不同路径

题目链接:https://leetcode.cn/problems/unique-paths/description/
思路:求不同路径,定义dp[i][j]表示,达到num[i][j]处有几种方法,每次只能往右方或者下方走一步,所以dp[i][j]依赖的是dp[i][j-1]和dp[i-1][j]故,dp[i][j]=dp[i][j-1]+dp[i-1][j]。

class Solution {public int uniquePaths(int m, int n) {int[] dp = new int[n];dp[0] = 1;for(int i = 0; i < m; i++) {for(int j = 1; j < n; j++) {dp[j] += dp[j-1];}}return dp[n-1];}
}

五、63. 不同路径 II

题目链接:https://leetcode.cn/problems/unique-paths-ii/description/
思路:本题和上题状态转移方程都是一样的,只需要注意有石头的地方把它设置为0;

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length, n = obstacleGrid[0].length;int[] dp = new int[n];for(int i = 0; i < n; i++) {if(obstacleGrid[0][i] == 1) break;dp[i] = 1;}for(int i = 1; i < m; i++) {for(int j = 0; j < n; j++) {if(obstacleGrid[i][j] == 1) {dp[j] = 0;}else if(j != 0) {dp[j] += dp[j-1];}}}return dp[n-1];}
}

http://www.ppmy.cn/server/21425.html

相关文章

经典文献阅读之--InsightMapper(深入研究矢量化高精地图的内部实例信息)

0. 简介 高精地图作为自动驾驶中最关键的组成部分&#xff0c;矢量化高精&#xff08;HD&#xff09;地图包含有关周围道路元素的详细信息&#xff0c;这对于现代自动驾驶汽车的各项下游任务是至关重要的&#xff0c;例如车辆规划和控制。最近的工作试图直接检测矢量化高精地图…

设计模式- 策略模式(Strategy Pattern)结构|原理|优缺点|场景|示例

设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型&#xff08;5种&#xff09; 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式 结构型&#xff08;7种&#xff09; 适配器…

Windows Server2019安全基线等保参考要求

Windows Server的基线安全(等保要求)检查项类别名称方式检查项预期是否达标加固建议文档IP协议防火墙TCP/IP筛选配置手动业务所需的TCP,UDP端口和IP协议是否开放0开放业务所需的TCP,UDP端口和IP协议是否启用Windows系统自带的防火墙自动启用windows自带的防火墙0更改允许接…

【QEMU系统分析之启动篇(十九)】

系列文章目录 第十九章 QEMU系统仿真的加速器上电后设置分析 文章目录 系列文章目录第十九章 QEMU系统仿真的加速器上电后设置分析 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的启动分析1.系统仿真的初始化代码2.主循环数据初始化3. os_setup_post()Windows 系统 os_set…

SpringCloud系列(10)--Eureka集群原理及搭建

前言&#xff1a;当注册中心只有一个&#xff0c;而且当这个注册中心宕机了&#xff0c;就会导致整个服务环境不可用&#xff0c;所以我们需要搭建Eureka注册中心集群来实现负载均衡故障容错 Eureka架构原理图 1、Eureka集群原理 2、创建Eureka Server端服务注册中心模块 (1)在…

Oracle Hint 语法详解

什么是Hint Hint 是 Oracle 提供的一种 SQL 语法&#xff0c;它允许用户在 SQL 语句中插入相关的语法&#xff0c;从而影响 SQL 的执行方式。 因为 Hint 的特殊作用&#xff0c;所以对于开发人员不应该在代码中使用它&#xff0c;Hint 更像是 Oracle 提供给 DBA 用来分析诊断问…

HTTP和HTTPS的区别及HTTPS的工作原理

一、HTTP和HTTPS的区别 1、安全性 HTTP:HTTP是明文传输的&#xff0c;这意味着数据在传输过程中不加密&#xff0c;容易受到中间人攻击。敏感信息&#xff0c;如密码和信用卡号&#xff0c;如果通过HTTP传输&#xff0c;可能会被窃取。HTTPS:HTTPS使用SSL(Secure Sockets Lay…

stm32-中断的使用和原理

一 什么是中断 : 轮询机制 &#xff1a;顾名思义&#xff0c;就是每轮都询问一次。比如 while 循环的每一次&#xff0c;就会执 行检查&#xff0c; 1. 此处串口是否有数据到来。 2. 每次都检测一下引脚状态 , 是否为低电 平。 本质是 while 循环每一次都把数据获取的函数或者…