🧩Algo 多维动归

64. 最小路径和

难度:🟡 Medium | 标签:动归 | 状态:⬜ LeetCode 链接

思路

dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])。 原地改 grid 省空间。

代码

class Solution {
public:
    int minPathSum(vector<vector<int>>& g) {
        int R = g.size(), C = g[0].size();
        for (int i = 0; i < R; ++i)
            for (int j = 0; j < C; ++j) {
                if (i == 0 && j == 0) continue;
                if (i == 0)       g[i][j] += g[i][j - 1];
                else if (j == 0)  g[i][j] += g[i - 1][j];
                else              g[i][j] += min(g[i - 1][j], g[i][j - 1]);
            }
        return g[R - 1][C - 1];
    }
};

复杂度

  • 时间 O(R · C),空间 O(1)(原地)

易错 / 回顾

  • 首行 / 首列只能从一个方向来
  • 原地修改要小心 (0,0) 不要重算
  • 若不能改原数组,开 O(C) 滚动数组
Related · 多维动归