今日学会一到DP题
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
输入:m = 3, n = 7
输出:28
示例 2:
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
- 向右 -> 向下 -> 向下
- 向下 -> 向下 -> 向右
- 向下 -> 向右 -> 向下
作者:宫水三叶
链接:https://leetcode-cn.com/leetbook/read/path-problems-in-dynamic-programming/rtwu06/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这道题,是一道动态规划题,求解动态规划, 要找出本题状态的定义,然后确定状态如何转移。
思路:
定义f[i] [j]为机器人到达(i,j)坐标的路径数。那f[0] [0]=1
当机器人不在最上面或者最左边时,f[i] [j] = f[i-1] [j]+f[i] [j-1]
当机器人在最上面或者最左边时,都为1.
所以我们可以建一个二维数组,将首行,首列初始化,然后循环出我们要求的f[n-1] [n-1]
一种更省空间的作法是,用一个向量v,先初始化为全1,然后v[i]=v[i-1]+v[i] 不断去更新这个向量,到最后返回这个向量的最后一个值。
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int>v(n,1);
for(int i=0;i<m-1;i++){
for(int j=1;j<n;j++){
v[j]=v[j-1]+v[j];
}
}
return v[n-1];
}
};
DP这方面自己真的太菜了,得好好学一学。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理