【DP】LeetCode 62. 不同路径
题目链接
思路
分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律
表示状态
假如机器人走到了最后一个格子,这时候考虑一下我们需要存储的信息:
- 最后一个格子的走法数量
- 机器人的坐标,来判断是否走到 Finish
这时候很容易想到使用二维数组 dp[i][j]
来表示机器人在坐标 i 和 j 处的走法数量。
找状态转移方程
可以想一想机器人在走最后到 Finish 有几种走法。一共就两种:从上面到 Finish 和从下面到 Finish。假设走到 Finish 上面的格子有 a 种走法,走到 Finish 左面的格子有 b 种走法,那么走到 Finish 的走法就一共 是
那么最后一步的状态转移方程就是
边界处理
在长方形区域的上边界和左边界都只有一种走法,所以
代码
class Solution {
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
Arrays.fill(dp[0], 1);
for(int i = 0; i < m; i++){
dp[i][0] = 1;
}
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」