1. 程式人生 > >LintCode 115. 不同的路徑 II

LintCode 115. 不同的路徑 II

ntc left pan ont flag 有一個 write 不同的 vector

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

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

網格中的障礙和空位置分別用 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
>> &a) { // write your code here int row=a.size(); int col=a[0].size(); if(row==1) return 1; if(a[row-1][col-1]==1) return 0; if(a[0][0]==1) return 0; bool flag=true; for(int i=0;i<col;i++) {
if(a[0][i]==0&&flag) a[0][i]=1; else if(a[0][i]==1) { a[0][i]=-1; flag=false; } } flag=true; for(int i=1;i<row;i++) { if(a[i][0]==0&&flag) a[i][
0]=1; else if(a[i][0]==1) { a[i][0]=-1; flag=false; } } for(int i=1;i<row;i++) { for(int j=1;j<col;j++) { if(a[i][j]==1) { a[i][j]=-1; continue; } int top=a[i-1][j]; int left=a[i][j-1]; if(top==-1) { top=0; } if(left==-1) { left=0; } a[i][j]=top+left; } } return a[row-1][col-1]; } };

LintCode 115. 不同的路徑 II