Leetcode題解系列——64. Minimum Path Sum(c++版)
阿新 • • 發佈:2018-12-08
題目連結:64. Minimum Path Sum
題目大意:給出一個矩陣,現在想尋求一條從最左上元素到達最右下的最短路徑,且只能向下走或者向右走兩種途徑。
一.演算法設計
這也是一道典型的動態規劃題目,我設計狀態為sum[ i ][ j ] 表示為第i行第j列到達該點的最短長度。現在想求sum[row - 1][col -1]的值。
狀態轉移方程:
- 向右走: sum[i][j] = sum[i-1][j] + grid[i][j]
- 向下走:sum[i][j] = sum[i][j-1] + grid[i][j]
最後sum[i][j]取上述兩值的最小值即可
注意點:
- 注意初始化第一個位置的距離,即sum[0][0]
- 注意判斷是否越界
- 初始化temp的值,不然取最小值的時候會出現錯誤,變為0.
二.演算法實現
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int col = grid[0].size();
int row = grid.size();
int sum[row][col] = {0};
sum[0][0] = grid[0][0];
for(int i = 0; i < row; i ++){
for(int j = 0; j < col; j++){
if(i == 0 && j == 0) continue;
int temp1 = 999,temp2 = 999;
// right
if(i-1 >= 0)
temp1 = sum[i- 1][j] + grid[i][j];
// bottom
if(j-1 >= 0)
temp2 = sum[i][j-1] + grid[i][j];
sum[i][j] = min (temp1,temp2);
}
}
return sum[row-1][col-1];
}
};