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

LeetCode:63. 不同路径 II

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:63. 不同路径 II
给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。
网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含任何有障碍物的方格。
返回机器人能够到达右下角的不同路径数量。
测试用例保证答案小于等于 2 * 109。
示例 1:
在这里插入图片描述
输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:

  1. 向右 -> 向右 -> 向下 -> 向下
  2. 向下 -> 向下 -> 向右 -> 向右
    示例 2:
    在这里插入图片描述
    输入:obstacleGrid = [[0,1],[0,0]]
    输出:1
  • 需要注意初始化的代码
	// 这种遇到障碍物则立即终止,后面的都为0
	for (int i = 0; i < n && obstacleGrid[0][i] == 0; i++) {
	    dp[0][i] = 1;
	}

	// 这种遇到障碍物还会继续向后遍历,在这里面是错误的初始化方式
	for (int i = 0; i < n; i++) {
	    if (obstacleGrid[0][i] != 1) {
	        dp[0][i] = 1;
	    }
	}
	public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];

        if (obstacleGrid[0][0] == 1 || obstacleGrid[m - 1][n - 1] == 1)
            return 0;

        for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) {
            dp[i][0] = 1;
        }
        for (int i = 0; i < n && obstacleGrid[0][i] == 0; i++) {
            dp[0][i] = 1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 0) {
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        return dp[m - 1][n - 1];
    }

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

相关文章:

  • JSR303校验教学
  • 国产碳化硅(SiC)MOSFET模块在电镀电源中全面取代进口IGBT模块
  • EasyExcel写入和读取多个sheet
  • Visual Studio Code修改terminal字体
  • 渗透测试之WAF规则触发绕过规则之规则库绕过方式
  • C语言-运算符
  • 在K8s中部署动态nfs存储provisioner
  • 基于 Redis GEO 实现条件分页查询用户附近的场馆列表
  • React第二十八章(css modules)
  • 在彼此的根系里呼吸
  • OpenEuler学习笔记(十七):OpenEuler搭建Redis高可用生产环境
  • V103开发笔记1-20250113
  • 类文件结构
  • Baklib如何提升企业知识管理效率与市场竞争力的五大对比分析
  • FFmpeg rtmp推流直播
  • 道氏理论简介
  • Baklib深入解析企业内容管理与内容中台的本质差异
  • P1044 [NOIP2003 普及组] 栈 C语言
  • Autogen_core: ClosureAgent使用与测试
  • selenium定位网页元素
  • 如何使用深度学习中的 Transformer 算法进行视频目标检测
  • C基础寒假练习(4)
  • 【Rust自学】17.3. 实现面向对象的设计模式
  • MSU:通过图结构增强LLM推理
  • Vue3的el-table-column下拉输入实时查询API数据选择的实现方法
  • 力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)