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

代码随想录算法训练营第三十九天-动态规划2|62.不同路径 , 63. 不同路径 II

今天的路劲问题,思想和昨天的爬楼梯一样,主要还是找到你这个位置是怎么来的,到达dp[i][j]的方法由到达dp[i - 1][j]的方法再加上到达dp[i][j - 1]的方法和。在初始化时,当i=0或者j=0时,到达他们的只有一条路劲,就是直走,所以对它进行初始化。

63. 不同路径 II 加了一个障碍物进去,加障碍物进去后,其实就是多了一个条件,就是到达这个点的方法为0,所以在原来的基础上加上如果遇到障碍物,那么dp[i][j]就等于0,加上这个条件就可以了。具体直接看代码:

62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

输入:m = 3, n = 7
输出:28
示例 2:

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下
示例 3:

输入:m = 7, n = 3
输出:28
示例 4:

输入:m = 3, n = 3
输出:6
提示:

1 <= m, n <= 100
题目数据保证答案小于等于 2 * 109

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

63. 不同路径 II

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

示例 1:

输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 
2
 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右
示例 2:

输入:obstacleGrid = [[0,1],[0,0]]
输出:1
提示:

m == obstacleGrid.length
n == obstacleGrid[i].length
1 <= m, n <= 100
obstacleGrid[i][j] 为 0 或 1
 

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


http://www.kler.cn/news/11937.html

相关文章:

  • 原生JS + HTML + CSS 实现快递物流信息 API 的数据链式展示
  • RabbitMQ之介绍
  • 2023TYUT移动应用软件开发程序修改题
  • C/C++程序设计——static关键字
  • NumPy 秘籍中文第二版:四、将 NumPy 与世界的其他地方连接
  • 「数字信号处理」MATLAB设计 双音多频拨号系统
  • ESP32设备驱动-MAX30102脉搏血氧饱和度和心率监测传感器驱动
  • 【GB28181】PJSIP库(七)C++接口PJSUA2类详解:Call、Buddy
  • 发令枪音效芯片,语音提示ic
  • WMS智能仓储
  • winForm目录文件介绍
  • 测试5年,从纯手工测试到测试开发,我是怎么拿到腾讯25koffer的?
  • 红黑树和平衡二叉树的优缺点及应用场景
  • ChatGPT或要推出APP,OpenAI官宣为ChatGPT招募移动端开发工程师
  • [架构之路-162]-《软考-系统分析师》-3-作系统基本原理-进程管理
  • 1.分布式电源接入对配电网影响分析
  • 追梦之旅【数据结构篇】——详解小白如何使用C语言实现堆数据结构
  • [架构之路-160]-《软考-系统分析师》-10-系统分析-7-数据与数据流程分析、需求规格说明书
  • GPT-4工具是软件工程师工作效率的倍增器
  • 前端解析Excel中的数据进行操作
  • 线性代数——矩阵
  • CTR-GCN 论文解读
  • 游戏运营专员的职责有哪些?提高游戏收入的关键是什么?
  • C语言实现惯导更新算法(机械编排)
  • DPDK入门(环境搭建以及小demo)
  • 2022国赛30:windows脚本题解析
  • python入门:cl.exe‘ failed with exit status 2错误通用解决方案
  • 【负荷预测】基于VMD-SSA-LSTM光伏功率预测【可以换数据变为其他负荷等预测】(Matlab代码实现)
  • 优橙内推河南专场——5G网络优化(中高级)工程师
  • mycat读写分离