Typescript-Algorithms
    Preparing search index...

    Variable minimum_path_sumConst

    minimum_path_sum: (grid: number[][]) => number = minPathSum

    64.最小路径和

    给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

    **说明:**每次只能向下或者向右移动一步。


    输入:

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

    输出: 7

    解释: 因为路径 1→3→1→1→1 的总和最小。


    输入:

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

    输出: 12


    • m == grid.length
    • n == grid[i].length
    • 1 <= m, n <= 200
    • 0 <= grid[i][j] <= 100

    Type declaration

      • (grid: number[][]): number
      • Parameters

        • grid: number[][]

        Returns number

    // 动态规划
    function minPathSum(grid: number[][]): number {
    // dp[i][j]表示达到(i,j)的最小路径和

    // 状态转移方程:
    // (i,j)只能在(i-1,j)向下走,或者在(i, j-1)向右走。
    // 则dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + grid[i][j]

    // 状态初始化
    // 当处于(0,j)的时候,从(0,0)出发只能向右一个方向走到(0,j),因此dp[0][j] = nums[0][0] + ... + nums[0][j];
    // 当处于(i,0)的时候,从(0,0)出发只能向下一个方向走到(i,0),因此dp[i][0] = nums[0][0] + ... + nums[i][0];
    const m = grid.length;
    const n = grid[0].length;
    const dp: number[][] = Array.from({ length: m }, () => new Array(n).fill(0));

    let sum = 0;
    for (let i = 0; i < m; i++) {
    sum += grid[i][0];
    dp[i][0] = sum;
    }

    sum = 0;
    for (let j = 0; j < n; j++) {
    sum += grid[0][j];
    dp[0][j] = sum;
    }

    for (let i = 1; i < m; i++) {
    for (let j = 1; j < n; j++) {
    dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
    }
    }

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

    // dfs
    function minPathSum1(grid: number[][]): number {
    const rows = grid.length;
    const cols = grid[0].length;

    // 表示从i行j列出发获取到的最小路径总和
    function dfs(i: number, j: number): number {
    if (i > rows - 1 || j > cols - 1) {
    return 0;
    }

    let directions = [[1, 0], [0, 1]];
    let min = Infinity;

    for (let k = 0; k < directions.length; k++) {
    min = Math.min(min, grid[i][j] + dfs(i + directions[k][0], j + directions[k][1]));
    }

    return min;
    }

    const result = dfs(0, 0);

    return result;
    };