zoukankan      html  css  js  c++  java
  • []leetcode]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]
    ]

    题目大意
    寻求最短路径,从左上走到右下,保证每次只能往左走或往下走(不可以斜着走)。其中数字1是障碍,表示“此路不通”,求总共的路线数


    思路
       1. 如果没有障碍

    val[i][0] = 1
    val[0][j] = 1
    val[i][j] = val[i-1][j] + val[i][j-1]

    2. 有了障碍后
    如果obstacle[i][j] = 1
    val[i][j] = 1
    否则
    tmp = obstacle[i-1][j] == 1 ? 0 : val[i-1][j]
    tmp = obstacle[i][j-1] == 1 ? tmp : tmp + val[i-1][j-1]
       val[i][j] = tmp

    参考代码
    class Solution {
    public:
        int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
            int row = obstacleGrid.size();
            int col = obstacleGrid[0].size();
            int token = 1;
            int val[row][col];
            for (int j = 0; j < col; ++j)
            {
                if(obstacleGrid[0][j] == 1)
                    token = 0;
                val[0][j] = token;
                
            }
            token = 1;
            for (int i = 0; i < row; ++i)
            {
                if(obstacleGrid[i][0] == 1)
                    token = 0;
                val[i][0] = token;
            }
            for (int i = 1; i < row; ++i)
            {
                for(int j = 1; j < col; ++j)
                {
                    if (obstacleGrid[i][j] == 1)
                        val[i][j] = 0;
                    else
                    {
                        int tmp = obstacleGrid[i-1][j] == 1 ? 0 :val[i-1][j];
                        tmp = obstacleGrid[i][j-1] == 1 ? tmp : tmp + val[i][j-1];
                        val[i][j] = tmp;
                    }
                }
            }
            return val[row-1][col-1];
        }
    };



  • 相关阅读:
    实现一个简单的ConnectionPool
    并发连接MySQL
    C#里面滥用String造成的性能问题
    String.IndexOf
    C#代码中插入X86汇编
    正确理解Handle对象
    orleans发送广播消息
    log日志方法
    PHP 批量插入数据
    逻辑漏洞小结之SRC篇
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3806896.html
Copyright © 2011-2022 走看看