leetcode 不同路径
初识动态规划,我对这个算法的理解是这样的:
1.找到初始值-原始解
2.在找到各种解与原始解的关系
3.通过循环得到答案
适用于动态规划的问题首先就是不同路径:
问题是给定一个M*N的地图从左上到右下角一共有多少种不同的方案(每次只能向右或者向下走一格)。
那么解决这个问题的关键在于你如何确定初始解与答案之间的联系。
首先我们可以确定地图的左边与上边都为1,因为只能往右或者下走。
例如从【0,0】走到【0,5】只能选择连续向右走五步,或者从【0,0】走到【5,0】只能选择连续向下走五步。
那么走到【1,1】有多少种走法? 根据每次只能向下走一步或者向右走一步的特性,所以只能由【0,1】或者【1,0】到达【1,1】。也就是说【1,1】的走法就是【1,0】的走法加上【0,1】的走法。
其他类似,只需要知道左边与上面的格子的走法也就知道本格子的走法了。
这时我们设置一个二维数组DP【】【】,表示从【0,0】到【i,j】之间有多少种走法。
那么结合之前的分析可以得知DP【i】【j】 = DP【i - 1】【j】 + DP【i】【j - 1】
代码如下:
public int uniquePaths(int m, int n) { int DP[][] = new int[m][n]; for(int i = 0; i < m; i++) DP[i][0] = 1; for(int i = 0; i < n; i++) DP[0][i] = 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 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理