classSolution{ fununiquePathsWithObstacles(obstacleGrid: Array<IntArray>): Int { val m = obstacleGrid.size val n = obstacleGrid[0].size val dp = Array(m) { IntArray(n) { 0 } }
// 第一列 for (i in0 until m) { // 遇到障碍物,下面格子都不能到达,路径数为0 if (obstacleGrid[i][0] == 1) break dp[i][0] = 1 }
// 第一行 for (j in0 until n) { // 遇到障碍物,右边格子都不能到达,路径数为0 if (obstacleGrid[0][j] == 1) break dp[0][j] = 1 }
for (i in1 until m) { for (j in1 until n) { if (obstacleGrid[i][j] == 1) dp[i][j] = 0 else dp[i][j] = dp[i - 1][j] + dp[i][j - 1] } } return dp[m - 1][n - 1] } }
classSolution{ fununiquePathsWithObstacles(obstacleGrid: Array<IntArray>): Int { val m = obstacleGrid.size val n = obstacleGrid[0].size val dp = IntArray(n) { 0 }
// 第一行 for (j in0 until n) { // 遇到障碍物,右边格子都不能到达,路径数为0 if (obstacleGrid[0][j] == 1) break dp[j] = 1 }
for (i in1 until m) { for (j in1 until n) { if (obstacleGrid[i][j] == 1) dp[j] = 0 // dp[j]: 达到上方格子的路径数 // dp[j - 1]: 达到左方格子的路径数 else dp[j] = dp[j] + dp[j - 1] } } return dp[n - 1] } }