LintCode 115. 不同的路徑 II
阿新 • • 發佈:2018-01-28
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