Unique Paths II
2017-11-29 08:25
274 查看
follow up带有阻挡的路径
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids.
How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
java
public class Solution {
/*
* @param obstacleGrid: A list of lists of integers
* @return: An integer
*/
public int uniquePathsWithObstacles(int[][] grid) {
// write your code here
if (grid == null || grid.length == 0) {
return 0;
}
if (grid[0] == null || grid[0].length == 0) {
return 0;
}
// state
int m = grid.length;
int n = grid[0].length;
int[][] f = new int[m]
;
// initialize
if (grid[0][0] == 1) {
return 0;
}
f[0][0] = 1;
for (int i = 1; i < m; i++) {
if (grid[i][0] == 1) {
break;
} else {
f[i][0] = 1;
}
}
for (int i = 1; i < n; i++) {
if (grid[0][i] == 1) {
break;
} else {
f[0][i] = 1;
}
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (grid[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];
}
}
python
class Solution:
"""
@param: obstacleGrid: A list of lists of integers
@return: An integer
"""
def uniquePathsWithObstacles(self, grid):
# write your code here
if grid is None or len(grid) == 0:
return 0
if grid[0] is None or len(grid[0]) == 0:
return 0
# state
m, n = len(grid), len(grid[0])
f = [[0] * n for i in range(m)]
if grid[0][0] == 1:
return 0
f[0][0] = 1
# initialize
for i in range(1, m):
if grid[i][0] == 1:
break
else:
f[i][0] = 1
for i in range(1, n):
if grid[0][i] == 1:
break
else:
f[0][i] = 1
# function
for i in range(1, m):
for j in range(1, n):
if grid[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]
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids.
How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
java
public class Solution {
/*
* @param obstacleGrid: A list of lists of integers
* @return: An integer
*/
public int uniquePathsWithObstacles(int[][] grid) {
// write your code here
if (grid == null || grid.length == 0) {
return 0;
}
if (grid[0] == null || grid[0].length == 0) {
return 0;
}
// state
int m = grid.length;
int n = grid[0].length;
int[][] f = new int[m]
;
// initialize
if (grid[0][0] == 1) {
return 0;
}
f[0][0] = 1;
for (int i = 1; i < m; i++) {
if (grid[i][0] == 1) {
break;
} else {
f[i][0] = 1;
}
}
for (int i = 1; i < n; i++) {
if (grid[0][i] == 1) {
break;
} else {
f[0][i] = 1;
}
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (grid[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];
}
}
python
class Solution:
"""
@param: obstacleGrid: A list of lists of integers
@return: An integer
"""
def uniquePathsWithObstacles(self, grid):
# write your code here
if grid is None or len(grid) == 0:
return 0
if grid[0] is None or len(grid[0]) == 0:
return 0
# state
m, n = len(grid), len(grid[0])
f = [[0] * n for i in range(m)]
if grid[0][0] == 1:
return 0
f[0][0] = 1
# initialize
for i in range(1, m):
if grid[i][0] == 1:
break
else:
f[i][0] = 1
for i in range(1, n):
if grid[0][i] == 1:
break
else:
f[0][i] = 1
# function
for i in range(1, m):
for j in range(1, n):
if grid[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]
相关文章推荐
- LintCode UniquePathsII 不同的路径II
- leetcode - Unique Paths II
- Unique Paths II
- 63. Unique Paths II
- LeetCode: Unique Paths II
- 【题解】【矩阵】【回溯】【Leetcode】Unique Paths II
- Unique Paths II
- 63. Unique Paths II
- LeetCode Unique Paths II
- 102. Unique Paths II
- LeetCode 62 Unique Paths & 63 Unique Paths II
- LeetCode-Unique Paths II
- Unique Paths II (dp题)
- Unique Paths II
- Unique Paths II
- Unique Paths and Unique Paths II
- Leetcode:63. Unique Paths II
- LeetCode 63 Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II