LeetCode 64 最小路徑和

2021-09-10 13:56:05 字數 1322 閱讀 6517

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

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

示例:輸入:

[[1,3,1],

[1,5,1],

[4,2,1]]

輸出: 7

解釋: 因為路徑 1→3→1→1→1 的總和最小。

以輸入為 3*3 的網格為例,其中 m=3,n=3

[1,3,1]

[1,5,1]

[4,2,1]

由於每次只能向下或者向右移動,則座標(0,0)的最小路徑就等於當前節點加上(0,1)或(1,0)的最小值,這樣可以得到遞迴方程:

dp(0,0) = grid(0,0) + min(dp(1,0),dp(0,1))

當到達網格的邊界時,下一步只能往右走或者往下走。這樣可以得到這個問題的一般遞迴解法。

class solution 

private:

int minpathsumrecusion(vector>& grid, int m, int n)

};

在leetcode上提交之後,不出意外的又超時了。下面先進行記憶化搜尋進行優化,再進行動態規劃演算法的改寫。

class solution 

private:

int minpathsumrecusion(vector>& grid, int m, int n)

if(m == grid.size()-1 && n == grid[0].size()-1)

if(m == grid.size()-1)

if(n == grid[0].size()-1)

m_memo[m][n] = min(grid[m][n]+minpathsumrecusion(grid,m+1,n), grid[m][n]+minpathsumrecusion(grid,m,n+1));

return m_memo[m][n];

}vector> m_memo;

};

按照上面的遞迴公式和記憶化搜尋演算法,如果把遞迴演算法從(0,0)逐步遞迴得到(m,n)看作是自頂向下,那麼從(m,n)開始通過迴圈逐步得到(0,0)就可以看作是自底向上,我們可以進一步得出此題的動態規劃解法。

class solution 

}return m_memo[0][0];

}};

posted @

2018-07-04 01:12

blue影 閱讀(

...)

編輯收藏

LeetCode 64 最小路徑和

題目描述 提示幫助 提交記錄 社群討論 閱讀解答 隨機一題 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和...

LeetCode 64 最小路徑和

題目 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。解題思路 1 由於路線只向下或者右走,所以在最上...

leetcode 64 最小路徑和

dp思想 對於第一行和第一列 都是從左往右 從上到下累加。然後對於其他的每個格仔 其值 為 它上面乙個的值 和左邊一格值的最小值 加上本格仔的值。這是一題非常簡單的dp題,用來練思維是再好不過了。能 ac 真實開心 時間 23min include include includeusing name...