【LeetCode】Unique Path Ⅱ
1. 题目
2. 分析
本题显然采用动态规划法。设障碍矩阵为ob[m][n],f[i][j]表示块(i,j)到块(0,0)的唯一路径数。如果ob[i][j]不为1,则f[i][j] = f[i-1][j]+ f[i][j-1];否则 f[i][j] = 0。由于块(0,0)到块(m -1,n -1)与(m-1,n-1)到(0,0)的路径相同,f[m-1][n-1]即为所求。
2.1 代码如下:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
int f[100][100] ={0};
int m = obstacleGrid.size(), n = obstacleGrid[0].size();
for(int i = 0;i<m;++i){
f[i][0] = 1;
if(obstacleGrid[i][0] == 1){
while(i < m){
f[i][0] = 0;
++i;
}
break;
}
}
for(int j = 0;j< n;++j){
f[0][j] = 1;
if(obstacleGrid[0][j] == 1){
while(j < n){
f[0][j] = 0;
++j;
}
break;
}
}
for(int i = 1;i<m;++i){
for(int j=1; j<n;++j){
if(obstacleGrid[i][j] == 1){
f[i][j] = 0;
}else{
f[i][j] = f[i-1][j] + f[i][j-1];
}
}
}
return f[m-1][n-1];
}
时间复杂度:O(m*n)
空间复杂度:O(1)