DeepSeek LeetCode 63. 不同路径 II TypeScript实现
·
LeetCode 63. 不同路径 II TypeScript 实现
题目描述
一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。网格中有障碍物,1 表示障碍物,0 表示空位。机器人试图达到网格的右下角,问总共有多少条不同的路径?
思路:动态规划 + 滚动数组
定义 dp[j] 表示到达当前行第 j 列的不同路径数。
· 若 obstacleGrid[i][j] == 1,则 dp[j] = 0(障碍物无法到达)。
· 否则,若 j > 0,则 dp[j] += dp[j - 1](从上方和左方累加)。
· 第一列 j = 0 时,dp[0] 继承上一行的值(只能一直向下走)。
TypeScript 代码
function uniquePathsWithObstacles(obstacleGrid: number[][]): number {
const m = obstacleGrid.length;
const n = obstacleGrid[0].length;
// 起点或终点有障碍,直接返回 0
if (obstacleGrid[0][0] === 1 || obstacleGrid[m - 1][n - 1] === 1) {
return 0;
}
const dp: number[] = new Array(n).fill(0);
dp[0] = 1;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (obstacleGrid[i][j] === 1) {
dp[j] = 0;
} else if (j > 0) {
dp[j] += dp[j - 1];
}
}
}
return dp[n - 1];
}
复杂度分析
指标 复杂度
时间复杂度 O(m × n),遍历整个网格
空间复杂度 O(n),使用一维滚动数组
示例验证
输入:
obstacleGrid = [
[0, 0, 0],
[0, 1, 0],
[0, 0, 0]
]
输出:2
路径为:
- 右 → 右 → 下 → 下
- 下 → 下 → 右 → 右
关键点
- 起点或终点为障碍物时直接返回 0。
- 使用一维数组滚动更新,dp[j] 在更新前代表上一行的值,更新后代表当前行的值。
- 遇到障碍物时 dp[j] = 0,后续列不会从该位置获得路径。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)