不同的路徑 II

問題描述:

"不同的路徑" 的跟進問題:

現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?

網格中的障礙和空位置分別用 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];  
    }
};

感想:

分析情況及順序要注意,可能出亂碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章