大家好,今天我们将带着乐高积木的心态,一步一步地搭建LeetCode第64题《最小路径和》。这道题就像在玩一场乐高拼图游戏,我们需要找到从起点到终点的最省积木的拼接路径。我们会详细解析这道题目的解题思路和Java代码实现的逻辑,并通过几个例子来说明解题过程。准备好了吗?让我们开始吧!
文章目录
题目描述
给定一个包含非负整数的m x n网格,找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。每次只能向下或者向右移动一步。
例如:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
解题思路
DP解法:动态规划——最省积木的拼接策略
我们可以把这道题看作是在一个乐高拼图板上,从左上角走到右下角的过程中,寻找一条最省积木的路径。为了找到这条路径,我们可以使用动态规划的方法,逐步累积每一步的最小路径和。
状态定义
定义一个二维数组dp
,其中dp[i][j]
表示到达位置(i, j)的最小路径和。显而易见:
- 到达起点
d