不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)


示例 1:

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

思路分析这个问题和上一篇路径题的分析一样,不同之处在于,加了障碍物。那么我们可以重新定义一个二维数组,用来返回路径数,具体思路见代码注释。
public static int uniquePathsWithObstacles(int[][] arr) { int m = arr.length; int n = arr[0].length; //如果起始位置和终点位置为1,直接返回0
        if(arr[0][0] == 1 || arr[m-1][n-1] == 1) return 0; //如果m == 1,判断第m-1行是不是有1,有1直接返回0,否则返回1
        if(m == 1) { for(int j = 1;j<n;j++) { if(arr[0][j] == 1) return 0; } return 1; } //如果n == 1,判断第n-1列是不是有1,有1直接返回0,否则返回1
        if(n == 1) { for(int i = 1;i < m;i++) { if(arr[i][0] == 1) return 0; } return 1; } //定义和输入数组arr一样大小的数组,作为判断
        int[][] array = new int[m][n]; for(int j = 1;j<n;j++) { //判断arr[0][j]是否等于1,如果不等于1,那么array[0][j]等于0,如果等于1, //从j列开始到j<n,array[0][j]全部赋值为0
            if(arr[0][j] == 0) { array[0][j] = 1; }else { for(int k = j;k<n;k++) { array[0][k] = 0; } break; } } for(int i = 1;i<m;i++) { //判断arr[i][0]是否等于1,如果不等于1,那么array[i][0]等于0,如果等于1, //从i行开始到i<m,array[i][0]全部赋值为0
            if(arr[i][0] == 0) { array[i][0] = 1; }else { for(int k = i;k<m;k++) { array[k][0] = 0; } break; } } for(int i = 1;i<m;i++) { for(int j = 1;j<n;j++) { //如果arr[i][j] == 1,array = 0,否则array[i][j] = array[i-1][j] + array[i][j - 1]
                if(arr[i][j] == 0) { array[i][j] = array[i-1][j] + array[i][j - 1]; } } } //返回数组array最后一个数
        return array[m-1][n-1]; }

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 Leetcode练习(Python):数组类:第63题:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?) Leetcode练习(Python) :数组类:第62题:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。) Leetcode练习(Python):数组类:第64题:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 矩阵从左上角向右下角走,每次只能向右或者向下移动,求经过最小的路径 一个n*n 的方格,要从左上角走到右下角,一次只能往右或往下走一步,求算法得出所有走动的方法数。 ROS costmap_2d局部障碍物无法清除和机器人到点摇摆 动态规划解决机器人网格路径问题! 从棋盘左上角到右下角共有多少种走法
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM