当前位置: 面试刷题>> 最小路径和Ⅰ (经典算法题500道)


题目描述补充

题目:最小路径和Ⅰ

给定一个 m x n 的网格 grid,网格中的每个单元格都有一个整数。从左上角开始,每次只能向右或向下移动一格,问从左上角移动到右下角的最小路径和是多少?

示例

输入:

grid = [
  [1,3,1],
  [1,5,1],
  [4,2,1]
]

输出: 7

解释: 从左上角到右下角的最小路径和为 1→3→1→1→1 = 7。

PHP 示例代码

function minPathSum($grid) {
    $m = count($grid);
    $n = count($grid[0]);

    // 初始化第一行和第一列
    for ($i = 1; $i < $m; $i++) {
        $grid[$i][0] += $grid[$i-1][0];
    }
    for ($j = 1; $j < $n; $j++) {
        $grid[0][$j] += $grid[0][$j-1];
    }

    // 填充剩余部分
    for ($i = 1; $i < $m; $i++) {
        for ($j = 1; $j < $n; $j++) {
            $grid[$i][$j] += min($grid[$i-1][$j], $grid[$i][$j-1]);
        }
    }

    return $grid[$m-1][$n-1];
}

// 测试用例
$grid = [
    [1,3,1],
    [1,5,1],
    [4,2,1]
];
echo minPathSum($grid); // 输出 7

Python 示例代码

def minPathSum(grid):
    m, n = len(grid), len(grid[0])

    # 初始化第一行和第一列
    for i in range(1, m):
        grid[i][0] += grid[i-1][0]
    for j in range(1, n):
        grid[0][j] += grid[0][j-1]

    # 填充剩余部分
    for i in range(1, m):
        for j in range(1, n):
            grid[i][j] += min(grid[i-1][j], grid[i][j-1])

    return grid[m-1][n-1]

# 测试用例
grid = [
    [1,3,1],
    [1,5,1],
    [4,2,1]
]
print(minPathSum(grid))  # 输出 7

JavaScript 示例代码

function minPathSum(grid) {
    const m = grid.length;
    const n = grid[0].length;

    // 初始化第一行和第一列
    for (let i = 1; i < m; i++) {
        grid[i][0] += grid[i-1][0];
    }
    for (let j = 1; j < n; j++) {
        grid[0][j] += grid[0][j-1];
    }

    // 填充剩余部分
    for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
            grid[i][j] += Math.min(grid[i-1][j], grid[i][j-1]);
        }
    }

    return grid[m-1][n-1];
}

// 测试用例
const grid = [
    [1,3,1],
    [1,5,1],
    [4,2,1]
];
console.log(minPathSum(grid)); // 输出 7

// 码小课网站中有更多相关内容分享给大家学习

以上示例代码展示了如何使用 PHP、Python 和 JavaScript 来解决“最小路径和Ⅰ”问题。

推荐面试题