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

    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.

    Note: m and n will be at most 100.

    ref:

    水中的鱼: [LeetCode] Unique Paths II 解题报告

    [解题思路]
    和Unique Path一样的转移方程:
    Step[i][j] = Step[i-1][j] + Step[i][j-1] if Array[i][j] ==0
    or            = 0 if Array[i][j] =1
     
     1 public class Solution {
     2     public int uniquePathsWithObstacles(int[][] obstacleGrid) {
     3         int[][] ways = new int[obstacleGrid.length+1][obstacleGrid[0].length+1];
     4         if(obstacleGrid[0][0] == 1)
     5             return 0;
     6         ways[0][1] = 1;
     7         for(int i =1; i<= obstacleGrid.length; i++){
     8             for(int j = 1; j<=obstacleGrid[0].length; j++){
     9                 if(obstacleGrid[i-1][j-1] == 0){
    10                     ways[i][j] = ways[i-1][j]+ways[i][j-1];
    11                 }else{
    12                     ways[i][j] = 0;
    13                 }
    14             }
    15         }
    16         
    17         return ways[obstacleGrid.length][obstacleGrid[0].length];
    18     }
    19 }
     
     
    滚动数组
     1 class Solution {
     2 
     3 public int uniquePathsWithObstacles(int[][] obstacleGrid) {
     4         int row = obstacleGrid.length;
     5         if(row == 0) return 0; 
     6         int col = obstacleGrid[0].length;
     7         
     8         if(obstacleGrid[0][0] == 1)
     9             return 0;
    10         
    11         int[] paths = new int[col];
    12         paths[0] = 1; 
    13         for(int i = 0; i < row ; i++){
    14             for(int j = 0; j < col; j++){
    15                 if(obstacleGrid[i][j] == 1){
    16                     paths[j] = 0;
    17                 }else if(j > 0){
    18                     paths[j] = paths[j]+paths[j-1];
    19                 }
    20             }
    21         }
    22         return paths[col -1];
    23     }
    24 }
     
    public class Solution {
        public int uniquePathsWithObstacles(int[][] obstacleGrid) {
            int m = obstacleGrid.length;
            int n = obstacleGrid[0].length;
            int[][] steps = new int[m+1][n+1];
            for(int i = 0; i < n+1; i++){
                steps[m][i] = 0;
            }
            
            for(int i = 0; i < m+1; i++){
                steps[i][n] = 0;
            }
            
            steps[m-1][n] =1;
            
            for(int i = m-1; i>= 0; i--){
                for(int j = n-1; j >=0; j--){
                    if(obstacleGrid[i][j] == 1){
                        steps[i][j] = 0;
                    }else {
                       steps[i][j] = steps[i+1][j] + steps[i][j+1];
                    }
                }
            }
            
            return steps[0][0];
        }
    }
  • 相关阅读:
    linux 回收站 路径
    Linux 让进程在后台可靠运行的几种方法
    用marquee和div+js实现首尾相连循环滚动效果
    轻型数据库SQLite结合PHP的开发
    linux系统权限修复——学生误操作!
    2009级 毕业设计 题目
    linux下硬盘uuid查看及修改设置
    创建网站地图
    用上下左右箭头键在textbox中的光标跳转
    SHELL中时间的比较
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3539144.html
Copyright © 2011-2022 走看看