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

embedded/2024/9/22 23:58:00/

力扣爆刷第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/embedded/20386.html

相关文章

Docker容器部署overleaf

overleaf在线版限制很多&#xff0c;好在开源&#xff0c;准备在本地Docker部署&#xff0c;网上翻了翻&#xff0c;似乎本地部署并非易事&#xff0c;我也尝试了一下&#xff0c;发现直接使用docker-compose拉官方最新镜像部署的确问题很多&#xff0c;不过最终还是完美解决。…

Swift字符串

在 Swift 中&#xff0c;Character 和 String 是用于处理文本数据的两个重要类型。 Character Character 是 Swift 中用于表示单个 Unicode 字符的类型。每个 Character 实例都代表一个可见的字符&#xff08;如字母、数字、标点符号等&#xff09;&#xff0c;或者一个不可见的…

详解数据结构:字符串

一、字符串 串&#xff1a;又称字符串&#xff0c;是由零个或多个字符组成的有限序列。 字符串通常用双引号括起来&#xff0c;例如S”abcdefg”&#xff0c;S为字符串的名字&#xff0c;双引号里面的内容为字符串的值。 串长&#xff1a;串中字符的个数&#xff0c;例如S的…

数字旅游打造个性化旅行体验,科技让旅行更精彩:借助数字技术,旅行者可以定制专属旅行计划,享受个性化的旅行体验

目录 一、引言 二、数字旅游的兴起与发展 三、数字技术助力个性化旅行体验 1、智能推荐系统&#xff1a;精准匹配旅行者需求 2、定制化旅行计划&#xff1a;满足个性化需求 3、实时互动与分享&#xff1a;增强旅行体验 四、科技提升旅行便捷性与安全性 1、移动支付与电…

ubuntu系统搭建pytorch环境详细步骤【笔记】

实践设备&#xff1a;华硕FX-PRO&#xff08;NVIDIA GeForce GTX 960M&#xff09; 搭建PyTorch环境的详细步骤如下&#xff1a; 安装Ubuntu系统&#xff1a; 下载Ubuntu的镜像文件并制作启动盘。将启动盘插入计算机&#xff0c;启动计算机并按照提示安装Ubuntu系统。 配置镜…

Pytorch 的实际应用 学习笔记

一. 模型的下载 weights为false时则为没有提前经过训练的模型&#xff0c;为true时则经过了提前训练 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) 打印 二. 模型的修改 &#xff08;1&#xff09;添加操作 …

Unity类银河恶魔城学习记录15-5,6 p157 Audio time limiter p158 Area sound

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​ AreaSound.cs using System.Collections; using System.Collections.G…

1146. 快照数组

java版本 class SnapshotArray {int id 0;List<int[]>[] snapshots;public SnapshotArray(int length) {snapshots new List[length];for (int i 0; i < length; i) {snapshots[i] new ArrayList<int[]>();}}public void set(int index, int val) {snapsho…