給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例:輸入:
[ [1,3,1],
[1,5,1],
[4,2,1]
]輸出: 7
解釋: 因為路徑 1→3→1→1→1 的總和最小。
class solution:
def minpathsum(self, grid: list[list[int]]) -> int:
if not grid or not grid[0]:
return 0
r = len(grid)
c = len(grid[0])
dp = [[0] * c for _ in range(r)]
dp[0][0] = grid[0][0]
for i in range(1,r):
dp[i][0] = dp[i - 1][0] + grid[i][0]
for j in range(1,c):
dp[0][j] = dp[0][j - 1] + grid[0][j]
for i in range(1,r):
for j in range(1,c):
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
return dp[-1][-1]
class solution:
def minpathsum(self, grid):
dp = [float('inf')] * (len(grid[0])+1)
dp[1] = 0
for row in grid:
for idx, num in enumerate(row):
dp[idx + 1] = min(dp[idx], dp[idx + 1]) + num
return dp[-1]
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...