"不同的路径" 的跟进问题:
现在考虑网格中有障碍物,那样将会有多少条不同的路径?
网格中的障碍和空位置分别用 1 和 0 来表示。
样例
Example 1:
Input: [[0]]
Output: 1
Example 2:
Input: [[0,0,0],[0,1,0],[0,0,0]]
Output: 2
Explanation:
Only 2 different path.
注意事项
m 和 n 均不超过100
/**
* f[i][j]=f[i-1][j]+f[i][j-1]
*
* f[i][j]= 0 (i,j)格子有障碍
* 1 i=0且j=0
* f[i-1][j] j=0
* f[i][j-1] i=0
* f[i-1][j]+f[i][j-1] 其他
*
* @param obstacleGrid: A list of lists of integers
* @return: An integer
*/
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
if (m == 0) {
return 0;
}
int n = obstacleGrid[0].length;
if (n == 0) {
return 0;
}
// write your code here
int[][] f = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// have obstacle
if (obstacleGrid[i][j] == 1) {
f[i][j] = 0;
continue;
}
if (i == 0 && j == 0) {
f[i][j] = 1;
continue;
}
if (i > 0) {
f[i][j] += f[i - 1][j];
}
if (j > 0) {
f[i][j] += f[i][j - 1];
}
}
}
return f[m - 1][n - 1];
}
网友评论