zoukankan      html  css  js  c++  java
  • LeetCode(63)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.

    分析

    带障碍的路径数计算问题,这个题目与上一题的区别之处在于,m*n的矩阵中有部分设置了障碍,当然有障碍的地方不能通过;

    虽然设立了障碍,该题目的本质仍然是一个动态规划问题,我们只需要增加判断当前点是否有障碍的代码即可,若有障碍那么此处不能通行,自然f(i,j)=0,对于其他点,依然用上一题目的推导公式即可!

    AC代码

    //直接用非递归算法求解
    class Solution {
    public:
        int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
    
            if (obstacleGrid.empty())
                return 0;
    
            int m = obstacleGrid.size();
            int n = obstacleGrid[0].size();
    
            vector<vector<int> > ret(m, vector<int>(n, 0));
    
            //矩阵首列
            for (int i = 0; i < m; i++)
            {
                //无障碍,则有一条路径,否则不通
                if (obstacleGrid[i][0] != 1)
                    ret[i][0] = 1;
                else
                    break;
            }//for
    
            //矩阵首行
            for (int j = 0; j < n; j++)
            {
                //无障碍,则有一条路径,否则不通
                if (obstacleGrid[0][j] != 1)
                    ret[0][j] = 1;
                else
                    break;
            }//for
    
            //其余位置
            for (int i = 1; i < m; i++)
            {
                for (int j = 1; j < n; j++)
                {
                    //当前位置为障碍,则到此处路径数为0
                    if (obstacleGrid[i][j] == 1)
                        ret[i][j] = 0;
                    else{
                        ret[i][j] = ret[i][j - 1] + ret[i - 1][j];
                    }//else
                }//for
            }//for
    
            return ret[m - 1][n - 1];
        }//uniques
    
    };

    GitHub测试程序源码

  • 相关阅读:
    P2048 [NOI2010]超级钢琴
    [LOJ#6468.] 魔法
    [牛客小白月赛18] Forsaken的数列
    [JSOI2011]柠檬
    [TJOI2015]组合数学
    【单调队列优化】[CF372C] Watching Fireworks is Fun
    【线段树】[Luogu P4198]楼房修建
    Python资源
    人生的几个阶段
    两种解读,生活的意义和方法
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214869.html
Copyright © 2011-2022 走看看