ブラッシングの質問-Leetcode-64。最小パスの合計(動的計画法)

64.最小パス合計

トピックリンク

出典:LeetCode
リンク:https://leetcode-cn.com/problems/minimum-path-sum/

タイトル説明

非負の整数を含むmxnグリッドがある場合、パス上の数値の合計が最小になるように、左上隅から右下隅へのパスを見つけてください。

注:一度に移動できるのは、1ステップ下または右のみです。

例1:
ここに画像の説明を挿入

入力:grid = [[1,3,1]、[1,5,1]、[4,2,1]]
出力:7
説明:パス1→3→1→1→1の合計は一番小さい。
例2:

入力:グリッド= [[1,2,3]、[4,5,6]]
出力:12

促す:

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

トピック分析

トップダウン。
主な問題は国境の取り扱いです。最初の列と最初の行の値を処理します。
そして、この問題は新しいベクトルを作成する必要はありません。データは元のベクトルで処理できます。

class Solution {
    
    
public:
    int minPathSum(vector<vector<int>>& grid) {
    
    
        int m = grid.size();
        int n = grid[0].size();

        //处理边界
        for(int i = 1; i < m; i++){
    
    
            grid[i][0] = grid[i-1][0] + grid[i][0];
        }
        for(int j = 1; j < n; j++){
    
    
            grid[0][j] = grid[0][j-1] + grid[0][j];
        }
        for(int i=1;i<m;i++){
    
    
            for(int j=1;j<n;j++){
    
    
                grid[i][j] = min(grid[i-1][j],grid[i][j-1]) + grid[i][j];
            }
        }
        return grid[m-1][n-1];
    }
};

おすすめ

転載: blog.csdn.net/qq_42771487/article/details/113030393