【DP】LeetCode 62. 不同路径

题目链接

62. 不同路径

思路

分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律

表示状态

假如机器人走到了最后一个格子,这时候考虑一下我们需要存储的信息:

  1. 最后一个格子的走法数量
  2. 机器人的坐标,来判断是否走到 Finish

这时候很容易想到使用二维数组 dp[i][j] 来表示机器人在坐标 i 和 j 处的走法数量。

找状态转移方程

可以想一想机器人在走最后到 Finish 有几种走法。一共就两种:从上面到 Finish 和从下面到 Finish。假设走到 Finish 上面的格子有 a 种走法,走到 Finish 左面的格子有 b 种走法,那么走到 Finish 的走法就一共 是 a+b 种。

那么最后一步的状态转移方程就是

dp[m][n]=dp[m1][n]+dp[m][n1]

边界处理

在长方形区域的上边界和左边界都只有一种走法,所以

dp[i][0]=dp[0][i]=1

代码

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];
    }
}
posted @   Frodo1124  阅读(16)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示