1. 程式人生 > >【leetcode】Unique Paths II(動態規劃)

【leetcode】Unique Paths II(動態規劃)

63. Unique Paths II

題目描述

Discuss
Pick One

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.

題解

使用動態規劃自底向上解決,設狀態f[i][j]為(1,1)到(i,j)的路線條數,僅能向右向下走,可得狀態轉移方程:
注意:
1. 第一列如果某一行有障礙物,後面的行全為0
2. 若起點終點有障礙,直接返回0

f[i][j] = f[i-1][j]+f[i][j-1]

Solution1:

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int
n = obstacleGrid[0].size(); if (obstacleGrid[0][0] == 1 | obstacleGrid[m-1][n-1] == 1) { return 0; } vector<int>f(n,0); f[0] = 1; for (int i = 0; i < m; i++) { // 第一列如果某一行有障礙物,後面的行全為0 f[0] = f[0] == 0 ? 0 : (obstacleGrid[i][0] ? 0
: 1); for (int j = 0; j < n; j++) { // f[i][j]=f[i-1][j]+f[i][j-1] f[j] = obstacleGrid[i][j] ? 0:(f[j]+f[j-1]); } } return f[n-1]; } };