zoukankan      html  css  js  c++  java
  • Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

    The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

    How many possible unique paths are there?

    Above is a 3 x 7 grid. How many possible unique paths are there?

    Note: m and n will be at most 100.

    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.

    很简单的DP, 但是要注意,如果起点或者终点为obstacle,则没有路径。

     1 public class Solution {
     2     public int uniquePathsWithObstacles(int[][] obstacleGrid) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         if(obstacleGrid == null || obstacleGrid.length == 0 || obstacleGrid[0].length == 0) return 0;
     5         int m = obstacleGrid.length;
     6         int n = obstacleGrid[0].length;
     7         int[][] num = new int[m][n];
     8         num[0][0] = 1;
     9         if(obstacleGrid[0][0] == 1 || obstacleGrid[m - 1][n - 1] == 1)
    10         {
    11             return 0;
    12         }
    13         for(int i = 0; i < m; i ++)
    14         {
    15             for(int j = 0; j < n; j ++)
    16             {
    17                 if(i > 0 && obstacleGrid[i - 1][j] != 1) num[i][j] += num[i - 1][j];
    18                 if(j > 0 && obstacleGrid[i][j - 1] != 1) num[i][j] += num[i][j - 1];
    19             }
    20         }
    21         return num[m - 1][n - 1];
    22     }
    23 }

     第三遍:

     1 public class Solution {
     2     public int uniquePathsWithObstacles(int[][] obstacleGrid) {
     3         if(obstacleGrid == null || obstacleGrid.length == 0 || obstacleGrid[0].length == 0) return 0;
     4         int m = obstacleGrid.length;
     5         int n = obstacleGrid[0].length;
     6         int[][] matrix = new int[m][n];
     7         matrix[m - 1][n - 1] = obstacleGrid[m - 1][n - 1] == 1 ? 0 : 1;
     8         for(int i = m - 2; i > -1; i --)
     9             matrix[i][n - 1] = obstacleGrid[i][n - 1] == 1 ? 0 : matrix[i + 1][n - 1];
    10         for(int i = n - 2; i > -1; i --)
    11             matrix[m - 1][i] = obstacleGrid[m - 1][i] == 1 ? 0 : matrix[m - 1][i + 1];
    12         if(matrix[0][0] == -1) return 0;
    13         for(int i = m - 2; i > -1; i --)
    14             for(int j = n - 2; j > -1; j --)
    15                 matrix[i][j] = obstacleGrid[i][j] == 1 ? 0 : matrix[i + 1][j] + matrix[i][j + 1];
    16         return matrix[0][0];
    17     }
    18 }
  • 相关阅读:
    漏洞扫描
    端口探测
    IP探测
    kali linux基础命令
    python学习07
    python学习06
    openoffice+jquery.media.js实现Linux与Windows中文档在线预览
    Oracle10g安装包
    MyEclipse2014安装包附注册破解包、eclipse安装包
    外层div自适应内层div高度
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3349879.html
Copyright © 2011-2022 走看看