不同的路径 II

来源:互联网 发布:剑灵秦义绝捏脸数据图 编辑:程序博客网 时间:2024/05/23 16:47

问题描述:

"不同的路径" 的跟进问题:

现在考虑网格中有障碍物,那样将会有多少条不同的路径?

网格中的障碍和空位置分别用 1 和 0 来表示。

 注意事项

m 和 n 均不超过100

样例

如下所示在3x3的网格中有一个障碍物:

[  [0,0,0],  [0,1,0],  [0,0,0]]

一共有2条不同的路径从左上角到右下角。

解题思路:

思路与不同的路径一致,注意有障碍时路是不通的

代码:

class Solution {
public:
    /*
     * @param obstacleGrid: A list of lists of integers
     * @return: An integer
     */
    int uniquePathsWithObstacles(vector<vector<int>> &obstacleGrid) {
        // write your code here
        int lc = obstacleGrid[0].size();  
        int lr = obstacleGrid.size();  
         
        int a[100][100];  
        memset(a, 0, sizeof(a));  
        for(int i = 0; i < lc; i++) {  
            if(0 == obstacleGrid[0][i])  
                a[0][i] = 1;  
            else  
                break;  
        }  
         
        for(int i = 0; i < lr; i++) {  
            if(0 == obstacleGrid[i][0])  
                a[i][0] = 1;  
            else  
                break;  
        }  
             
        for(int i = 1; i < lr; i++){  
            for(int j = 1; j < lc; j++){  
                if(obstacleGrid[i][j] == 0)  
                    a[i][j] = a[i-1][j] + a[i][j-1];  
                else  
                    a[i][j] = 0;  
                 
            }  
        }  
        return a[lr-1][lc-1];  
    }
};

感想:

分析情况及顺序要注意,可能出乱码