LeetCode - 62. Unique Paths

本文介绍了一种解决路径寻找问题的动态规划方法——矩阵动态规划。通过具体实例讲解了状态定义、递推公式确定、边界条件初始化及最终答案获取等步骤,并提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题是一道典型的动态规划题目,在题目中出现以下情况的话经常要考虑使用动态规划的方法:


而动态规划的话,通常会有以下几种类型:Matrix, Sequence, Two Sequences和Backpack。这道题目就是Matrix DP,而在Matrix DP中,有四个步骤需要考虑:

state: f[x][y]表示从起点走到坐标x,y...

function: 研究最后一步怎么走

initialize: 起点

answer: 终点

对于这道特定的题目,有以下的情况:


因为最后一步走法的数量等于从上面来的走法的数量+从左边来的走法的数量,另外需要注意的是,动态规划中用到二维数组的话,最好把[i][0]和[0][j]也进行初始化一下。时间复杂度为O(n^2),空间复杂度为O(m * n),代码如下:

public class Solution {
    public int uniquePaths(int m, int n) {
        int[][] matrix = new int[m][n];
        
        // Initialize 
        for(int i = 0; i < m; i++){
            matrix[i][0] = 1;
        }
        for(int j = 0; j < n; j++){
            matrix[0][j] = 1;
        }
        
        // DP
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                matrix[i][j] = matrix[i - 1][j] + matrix[i][j - 1];
            }
        }
        
        return matrix[m - 1][n - 1];
    }
}


知识点:

1. 使用动态规划的情况,以及培养动态规划的思想

2. 处理动态规划问题的四个要素,以及每一步所代表的意义

3. 动态规划中使用到二维数组的话,最好把[i][0], [0][j]也初始化一下

4. 注意这里题目中规定了只能向下或向右走,如果没有这个规定的话,那么不能使用动态规划去处理这个问题,因为我们没有办法去找function之间的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值