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];
}
};