[ 熱題 HOT 100]---64. 最小路徑和--- 動態規劃

1 題目描述

給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和爲最小。

說明:每次只能向下或者向右移動一步。

示例:

輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 7
解釋: 因爲路徑 1→3→1→1→1 的總和最小。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-path-sum
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

2 解題思路

在這裏插入圖片描述

在這裏插入圖片描述

3 解決代碼

  • 方法:動態規劃《Java代碼》
class Solution {
    public int minPathSum(int[][] grid) {
        for(int i = 0; i < grid.length; i++){
            for(int j = 0; j < grid[0].length; j++){
                if(i == 0 && j ==0) continue;
                //j= 0,爲第一行,只能從左邊來
                if(j == 0){
                    grid[i][j] = grid[i - 1][j] + grid[i][j];
                }
                //i=0,爲第一列,只能從上邊來
                else if(i == 0){
                    grid[i][j] = grid[i][j - 1] + grid[i][j];
                }
                //否則就是中間元素,取上邊和左邊的最小值相加
                else{
                    grid[i][j] = Math.min(grid[i-1][j], grid[i][j-1]) + grid[i][j];
                }
            }
        }
        return grid[grid.length - 1][grid[0].length - 1];

    }
}
  • 方法:動態規劃《python代碼》
class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        for i in range(0, len(grid)):
            for j in range(0, len(grid[0])):
                if i == 0 and j == 0:
                    continue
                if j == 0:
                    grid[i][j] = grid[i - 1][j] + grid[i][j]
                elif i == 0:
                    grid[i][j] = grid[i][j - 1] + grid[i][j]
                else:
                    grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]
        return grid[len(grid) - 1][len(grid[0])- 1]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章