[leetcode] 63. 不同路径 II

63. 不同路径 II

无非就是在上一个题62. 不同路径加了些障碍嘛,做法完全一样

在计算f[i][j]的时候,判断一下上方或者左方有没有障碍物,有的话就说明不能从那个方向过来,不累加那个方向的值就是了

障碍物在终点时属于特殊情况,需要额外注意

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        if (m <= 0) {
            return 0;
        }
        int n = obstacleGrid[0].length;

        if (obstacleGrid[m - 1][n - 1] == 1) {
            return 0;
        }

        int[][] f = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 && j == 0) {
                    f[i][j] = 1;
                }
                if (i - 1 >= 0 && obstacleGrid[i - 1][j] != 1) {
                    f[i][j] += f[i - 1][j];
                }
                if (j - 1 >= 0 && obstacleGrid[i][j - 1] != 1) {
                    f[i][j] += f[i][j - 1];
                }
            }
        }
        return f[m - 1][n - 1];
    }
}
posted @ 2018-07-24 22:04  ACBingo  阅读(300)  评论(0编辑  收藏  举报