1. 程式人生 > 其它 >LeetCode 0063 Unique Paths II

LeetCode 0063 Unique Paths II

原題傳送門

1. 題目描述

2. Solution 1

1、思路分析
DP
1. 狀態定義
dp[i][j] 表示 到達grid[i][j]的路徑數
2. 初始狀態
dp[row][0] = 1 row in [0, rows]
dp[0][col] = 1 col in [0, cols]
3. 轉態轉移方程
dp[i][j] = dp[i-1][j] + dp[i][j - 1]
特別地,當obstacleGrid[i][j] = 1,意味著此路不通,dp[i][j] = 0

2、程式碼實現

package Q0099.Q0063UniquePathII;

/*
    DP
    1. 狀態定義
        dp[i][j] 表示 到達grid[i][j]的路徑數
    2. 初始狀態
        dp[row][0] = 1  row in [0, rows]
        dp[0][col] = 1  col in [0, cols]

    3. 轉態轉移方程
        dp[i][j] = dp[i-1][j] + dp[i][j - 1]
        特別地,當obstacleGrid[i][j] = 1,意味著此路不通,dp[i][j] = 0
 */
public class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int width = obstacleGrid[0].length;
        int[] dp = new int[width];

        dp[0] = 1;
        for (int[] row : obstacleGrid) {
            for (int j = 0; j < width; j++) {
                if (row[j] == 1) dp[j] = 0;
                else if (j > 0) dp[j] += dp[j - 1];
            }
        }
        return dp[width - 1];
    }
}

3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(n)