lintcode-不同的路徑II-115
阿新 • • 發佈:2018-12-26
跟進“不同的路徑”:
現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?
網格中的障礙和空位置分別用1和0來表示。
樣例如下所示在3x3的網格中有一個障礙物:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
一共有2條不同的路徑從左上角到右下角。
注意 m和n均不超過100
特別提示:此題不同於走迷宮,來到一點只能選擇向下或向右走或退回,用遞迴直接超時,所以選擇動態規劃
class Solution { public: int uniquePathsWithObstacles(vector<vector<int> > &Grid) { int dp[100][100]; int r=Grid.size(); int c=Grid[0].size(); for(int i=0;i<r;++i){ //第一列 if(0==Grid[i][0]) //因為只能向下或者向右走,所以從起點來到該點方法有一種 dp[i][0]=1; else break; //阻塞了,接下來不用考慮下面的點,肯定走不到 } for(int i=0;i<c;++i){ //第一行 同理 if(0==Grid[0][i]) dp[0][i]=1; else break; } for(int i=1;i<r;++i) for(int j=1;j<c;++j){ if(0==Grid[i][j]) dp[i][j]=dp[i-1][j]+dp[i][j-1]; //從起點走到該點有幾種途徑等於 //從起點到該點上面的點和該點左 //邊的點途徑之和 else dp[i][j]=0; } return dp[r-1][c-1]; } };