Leetcode:63题不同路径||
时间: 2023-10-30 20:06:48 浏览: 171
根据给出的参考代码,Leetcode第63题的题目是不同路径II。这道题目给定了一个包含障碍物的网格,机器人只能向右或向下移动,需要计算从左上角到右下角的不同路径数。如果有障碍物,那么该位置将被视为不可通过。
该问题可以使用动态规划来解决。我们可以创建一个与给定网格相同大小的二维数组dp,其中dp[i][j]表示从起点到网格中(i,j)位置的不同路径数。然后,我们可以根据以下状态转移方程来计算不同路径数:
- 如果网格中(i,j)位置有障碍物,则dp[i][j]为0,因为此位置无法通过。
- 否则,dp[i][j]等于dp[i-1][j]加上dp[i][j-1],因为机器人只能向右或向下移动。
最后,dp[m-1][n-1]即为从起点到终点的不同路径数。
代码示例:
```
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int[][] dp = new int[m][n];
// 初始化第一行和第一列
for (int i = 0; i < m; i++) {
if (obstacleGrid[i][0] == 1) {
break;
}
dp[i][0] = 1;
}
for (int j = 0; j < n; j++) {
if (obstacleGrid[0][j] == 1) {
break;
}
dp[0][j] = 1;
}
// 计算不同路径数
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
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];
}
}
```
阅读全文