LeetCode 62. 不同路径
62. 不同路径
Difficulty: 中等
一个机器人位于一个 m x n
网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
输入:m = 3, n = 7
输出:28
示例 2:
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1\. 向右 -> 向下 -> 向下
2\. 向下 -> 向下 -> 向右
3\. 向下 -> 向右 -> 向下
示例 3:
输入:m = 7, n = 3
输出:28
示例 4:
输入:m = 3, n = 3
输出:6
提示:
1 <= m, n <= 100
- 题目数据保证答案小于等于
2 * 10<sup>9</sup>
Solution
这是一道考察动态规划的题,解决动态规划的关键是如何将大的问题分解为小的子问题,在本题中令到达m,n网格的路径条数有f(m,n)
条,因为机器人只能向下或者向右移动,那么到达m,n之前只可能在(m,n-1)
或(m-1,n)
两个网格之间,那么可得f(m,n)=f(m,n-1)+f(m-1,n)
,即本题的动态转移方程。因此,我们可以从矩阵的(1,1)出发,向目标(m,n)递推逼近求解,时间复杂度为O(mn)
。
最近几天做了几道动态规划的题目之后慢慢地发现解题的一些规律了。
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
paths = [[0] * (n+1) for _ in range(m+1)]
if m < 0 or n < 0:
return 0
paths[1][1] = 1
for i in range(1, m+1):
for j in range(1, n+1):
if i == 1 and j == 1:
continue
else:
paths[i][j] = paths[i-1][j] + paths[i][j-1]
return paths[m][n]
分类:
LeetCode刷题笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现