給定乙個只含非負整數的m*n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。
你在同一時間只能向下或者向右移動一步
解題思路:
[[1, 3, 5, 7, 9],1、假設上面為m*n的網格,因為只能向下或者向右,所以第一行和第一列只能由前一位移動來,記錄路徑和[5, 2,8,5,1],
[4,4,7,2,3],
[3,6,6,1,1],
[2,8,5,0,4]]
2、從[1][1]開始計算,找到左邊或者上面的最小值,即dp[i][j] = grid[i][j] +min(dp[i][j-1], dp[i-1][j])
3、當全部的網路記錄完成後,右下角的值就是最小路徑和。
class solution:
"""@param grid: a list of lists of integers
@return: an integer, minimizes the sum of all numbers along its path
"""def minpathsum(self, grid):
# write your code here
#定義乙個相同形狀的陣列
n = len(grid)
m = len(grid[0])
dp = grid
#左上角的路徑和為自身。
# 因為只能向右或者向下移動,所以第一行和第一列只能由上一位移動來
for i in range(1, m):
dp[0][i] = dp[0][i-1] + grid[0][i]
for i in range(1, n):
dp[i][0] = dp[i-1][0] + grid[i][0]
# 記錄其他位置的最優路徑和,只能從上或者右,所以選擇最優
for i in range(1, n):
for j in range(1, m):
dp[i][j] = grid[i][j] + min(dp[i][j-1], dp[i-1][j])
return dp[n-1][m-1]
Lintcode演算法練習 110 最小路徑和
描述給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。樣例 example 1 input 1,3,1 1,5,1 4,2,1 output 7 example 2 input 1,3,2 output 6 思路利用動態規劃思想解決問題,動態規劃的思想是將乙個問題分...
LintCode 110 最小路徑和
給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。樣例 1 輸入 1,3,1 1,5,1 4,2,1 輸出 7 樣例解釋 路線為 1 3 1 1 1。樣例 2 輸入 1,3,2 輸出 6 解釋 路線是 1 3 2你在同一時間只能向下或者向右移動一步 public c...
lintcode 110最小路徑和
最小路徑和 給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。注意事項 你在同一時間只能向下或者向右移動一步 您在真實的面試中是否遇到過這個題?yes樣例 標籤 動態規劃 相關題目 1 dynamic programming 容易 數字三角形 26 2 dynami...