LeetCode | 64. 最小路徑和

"""
64. 最小路徑和
https://leetcode.cn/problems/minimum-path-sum/
題目分析:
    這題驗度是中等,是DP的基本應用
理論: dp
    因爲題目是獲取最小和,所以轉移方程如下:
    dp[i][j]=min(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j])
注意/難點:
    na
"""
import numpy as np
class Solution:
    def minPathSum(self, grid:list) -> int:
        m=len(grid)                                        #行數row
        n=len(grid[0])                                     #列數column
        dp=[[0]*n for _ in range(m)]                       #初始化dp
        dp[0][0]=grid[0][0]                                #初始化
        #預處理首行
        for j in range(1,n):
            dp[0][j]=dp[0][j-1]+grid[0][j]
        #預處理首列
        for i in range(1,m):
            dp[i][0]=dp[i-1][0]+grid[i][0]
        for i in range(1,m):
            for j in range(1,n):
                cur=grid[i][j]                             #當前值
                dp[i][j]=min(dp[i-1][j],dp[i][j-1])+cur    #轉移方程
        print(np.array(dp))
        return dp[m-1][n-1]
        
grid = [[1,3,1],[1,5,1],[4,2,1]]
# grid = [[1,2,3],[4,5,6]]
ans=Solution().minPathSum(grid)
print(ans)

dp的輸出模擬結果

[[1 4 5]
 [2 7 6]
 [6 8 7]]

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