【LeetCode】64 最小路徑和 (C++)
阿新 • • 發佈:2018-12-20
題目描述:
給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例:
輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 7
解釋: 因為路徑 1→3→1→1→1 的總和最小。
解題方案:
很經典的一道動態規劃的題,沒什麼要注意的地方。
程式碼:
class Solution { public: int minPathSum(vector<vector<int>>& grid) { vector<vector<int>> sum; int m = grid.size(); if(m == 0) return 0; int n = grid[0].size(); sum.resize(m); for(int i = 0; i < m; i ++) sum[i].resize(n); sum[0][0] = grid[0][0]; for(int i = 0; i < m; i ++) for(int j = 0; j < n; j ++) { if(i == 0 && j != 0) sum[i][j] = sum[i][j - 1] + grid[i][j]; else if(i != 0 && j == 0) sum[i][j] = sum[i - 1][j] + grid[i][j]; else if(i != 0 && j != 0) { int d = sum[i][j - 1] < sum[i - 1][j] ? sum[i][j - 1] : sum[i - 1][j]; sum[i][j] = d + grid[i][j]; } } return sum[m - 1][n - 1]; } };