(算法分析Week12)Unique Paths II[Medium]

来源:互联网 发布:亚麻籽油 知乎 编辑:程序博客网 时间:2024/05/17 01:38

63.Unique Paths II[Medium]

题目来源

Description

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

增添了限制条件,有部分格子有障碍,不能走。
由于规则是只能往右和往下,所以若(i,j)位置有障碍,那么(i, j)这个位置就不可达(相当于没有贡献),因此不能用原来的递归式,直接取等于0即可,剩下的代码基本上没有变化,初始化边界上行和列时,出现障碍,后面路径数都是0,所以不能直接把边界上的行和列赋值为1.
注意数组的初始化和dp数组与obstacle数组的对应关系。
obstacle从0开始,dp数组下标从1开始。

Complexity analysis

O(mn)

Code

class Solution {public:    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {       int m = obstacleGrid.size();        int n = obstacleGrid[0].size();        int arr[m+1][n+1];//注意初始化for (int i = 0; i <= m; i++) {    for (int j = 0; j <= n; j++) {        arr[i][j] = 0;    }}  arr[0][1] = 1;        for (int i = 1; i <= m; i++) {            for (int j = 1; j <= n; j++) {            //下标对应,要相应减一                if (obstacleGrid[i-1][j-1] == 1)                 arr[i][j] = 0;                else arr[i][j] = arr[i-1][j] + arr[i][j-1];            }        }    return arr[m][n];    }};

Result

这里写图片描述

原创粉丝点击