不同路径(二)

在一的基础上增加了障碍:

思路一样,状态转移方程不变,但是要改变转移的条件。

为了便于计算,障碍物赋值-1

情况一:边界处理

当边界中含有障碍物时,那么障碍物以后的位置都要赋值-1,不可达。

情况二:中间

当不在边界上时,计算经过每一个位置的路径M【i】【j】时,需要注意,当M【i-1】【j】和M【i】【j-1】都不为-1的时,它两的和才赋值给M【i】【j】;只要它两中有一个为-1,那么就把另一个的值赋值给M【i】【j】。

情况三:开始位置

开始位置有障碍,那么直接返回0

情况四:结束位置

结束位置如果有障碍,那么直接返回0

代码:

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int i,j = 0,k=0;
        for (i = 0 ; i < obstacleGrid.length;i++){
            for (j = 0; j < obstacleGrid[i].length;j++){
                if (i == 0 || j == 0){
                    if (obstacleGrid[i][j] == 1){
                        obstacleGrid[i][j] = -1;
                    }else {
                        if (j > 0){
                            if (obstacleGrid[i][j-1] == -1){
                                obstacleGrid[i][j] = -1;
                            }else {
                                obstacleGrid[i][j] = 1;
                            }
                        }
                        if (i > 0){
                            if (obstacleGrid[i - 1][j] == -1){
                                obstacleGrid[i][j] = -1;
                            } else {
                                obstacleGrid[i][j] = 1;
                            }
                        }
                        if (i == 0 && j == 0){
                            obstacleGrid[i][j] = 1;
                        }
                    }
                }else {
                    if (obstacleGrid[i][j] == 1){
                        obstacleGrid[i][j] = -1;
                    }else {
                        if (obstacleGrid[i - 1][j] < 0 || obstacleGrid[i][j - 1] < 0) {
                            obstacleGrid[i][j] = obstacleGrid[i - 1][j] < 0 ? obstacleGrid[i][j - 1] : obstacleGrid[i - 1][j];
                        } else if (obstacleGrid[i - 1][j] > 0 && obstacleGrid[i][j - 1] > 0) {
                            obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1];
                        }
                    }
                }
            }
        }
        if (obstacleGrid[i-1][j-1] == -1){
            return 0;
        }
        return obstacleGrid[i-1][j-1] ;
    }
}

猜你喜欢

转载自blog.csdn.net/lyj2018gyq/article/details/83997340
今日推荐