• Unique Paths II 解答


    Question

    Follow up for "Unique Paths":

    Now consider if some obstacles are added to the grids. How many unique paths would there be?

    An obstacle and empty space is marked as 1 and 0 respectively in the grid.

    For example,

    There is one obstacle in the middle of a 3x3 grid as illustrated below.

    [
      [0,0,0],
      [0,1,0],
      [0,0,0]
    ]
    

    The total number of unique paths is 2.

    Solution

    Similar with "Unique Paths", there are two differences to be considered:

    1. for dp[0][i] and dp[i][0], if there exists previous element which equals to 1, then the rest elements are all unreachable.

    2. for dp[i][j], if it equals to 1, then it's unreachable.

     1 public class Solution {
     2     public int uniquePathsWithObstacles(int[][] obstacleGrid) {
     3         if (obstacleGrid == null)
     4             return 0;
     5         int m = obstacleGrid.length, n = obstacleGrid[0].length;
     6         int[][] dp = new int[m][n];
     7         // Check first element
     8         if (obstacleGrid[0][0] == 1)
     9             return 0;
    10         else
    11             dp[0][0] = 1;
    12         // Left column
    13         for (int i = 1; i < m; i++) {
    14             if (obstacleGrid[i][0] == 1)
    15                 dp[i][0] = 0;
    16             else
    17                 dp[i][0] = dp[i - 1][0];
    18         }
    19         // Top row
    20         for (int i = 1; i < n; i++) {
    21             if (obstacleGrid[0][i] == 1)
    22                 dp[0][i] = 0;
    23             else
    24                 dp[0][i] = dp[0][i - 1];
    25         }
    26         // Inside
    27         for (int i = 1; i < m; i++) {
    28             for (int j = 1; j < n; j++) {
    29                 if (obstacleGrid[i][j] == 1)
    30                     dp[i][j] = 0;
    31                 else
    32                     dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
    33             }
    34         }
    35         return dp[m - 1][n - 1];
    36     }
    37 }
  • 相关阅读:
    Python----路由器远程控制
    进程和线程的区别
    tengine日志切割-配置分钟级别日志自动切割
    grep每次读取多大的文本
    bc 进制间转换
    二分法猜数字
    What is the difference between HTTP_CLIENT_IP and HTTP_X_FORWARDED_FOR
    Nginx配置两份日志记录
    Nginx启动报错误unlink() “nginx.pid” failed (2: No such file or directory)
    Mysql 数据库crash恢复
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4822785.html
Copyright © 2020-2023  润新知