class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
if not obstacleGrid or obstacleGrid[0][0] == 1:
return 0
row = len(obstacleGrid)
col = len(obstacleGrid[0])
obstacleGrid[0][0] = 1
for i in range(1, col):
if obstacleGrid[0][i] == 1:
obstacleGrid[0][i] = 0
else:
obstacleGrid[0][i] = obstacleGrid[0][i-1]
for i in range(1, row):
if obstacleGrid[i][0] == 1:
obstacleGrid[i][0] = 0
else:
obstacleGrid[i][0] = obstacleGrid[i-1][0]
for i in range(1, row):
for j in range(1, col):
if obstacleGrid[i][j] == 0:
obstacleGrid[i][j] = obstacleGrid[i-1][j] + \
obstacleGrid[i][j-1]
else:
obstacleGrid[i][j] = 0
return obstacleGrid[-1][-1]
Runtime: 40 ms, faster than 98.50% of Python3 online submissions for Unique Paths II.
Memory Usage: 12.7 MB, less than 100.00% of Python3 online submissions for Unique Paths II.
var uniquePathsWithObstacles = function(obstacleGrid) {
if (!obstacleGrid || obstacleGrid[0][0] === 1) {
return 0
}
row = obstacleGrid.length
col = obstacleGrid[0].length
obstacleGrid[0][0] = 1
for (let i = 1; i < row; i++) {
if (obstacleGrid[i][0] === 1) {
obstacleGrid[i][0] = 0
} else {
obstacleGrid[i][0] = obstacleGrid[i - 1][0]
}
}
for (let i = 1; i < col; i++) {
if (obstacleGrid[0][i] === 1) {
obstacleGrid[0][i] = 0
} else {
obstacleGrid[0][i] = obstacleGrid[0][i - 1]
}
}
for (let i = 1; i < row; i++) {
for (let j = 1; j < col; j++) {
if (obstacleGrid[i][j] === 1) {
obstacleGrid[i][j] = 0
} else {
obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1]
}
}
}
return obstacleGrid[row - 1][col - 1]
};
Runtime: 52 ms, faster than 95.23% of JavaScript online submissions for Unique Paths II.
Memory Usage: 35.4 MB, less than 100.00% of JavaScript online submissions for Unique Paths II.
func uniquePathsWithObstacles(obstacleGrid [][]int) int {
if obstacleGrid == nil || obstacleGrid[0][0] == 1 {
return 0
}
obstacleGrid[0][0] = 1
row := len(obstacleGrid)
col := len(obstacleGrid[0])
for i := 1; i < row; i++ {
if obstacleGrid[i][0] == 1 {
obstacleGrid[i][0] = 0
} else {
obstacleGrid[i][0] = obstacleGrid[i-1][0]
}
}
for i := 1; i < col; i++ {
if obstacleGrid[0][i] == 1 {
obstacleGrid[0][i] = 0
} else {
obstacleGrid[0][i] = obstacleGrid[0][i-1]
}
}
for i := 1; i < row; i++ {
for j := 1; j < col; j++ {
if obstacleGrid[i][j] == 1 {
obstacleGrid[i][j] = 0
} else {
obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1]
}
}
}
return obstacleGrid[row-1][col-1]
}
Runtime: 0 ms, faster than 100.00% of Go online submissions for Unique Paths II.
Memory Usage: 2.6 MB, less than 100.00% of Go online submissions for Unique Paths II.