leetcode 64. 最小路徑和
阿新 • • 發佈:2018-06-21
min pub urn div 得到 paths () cto ++
給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例:
輸入: [ [1,3,1], [1,5,1], [4,2,1] ] 輸出: 7 解釋: 因為路徑 1→3→1→1→1 的總和最小。
每次移動只能向右或者向下,所到達當前點,只能通過當前點的上面或者左邊到達, 因而,為了得到到當前點的最小路徑我們可以得到這樣的關系式dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j];
對於第一行的最小路徑只能是grid[0][0] 到 grid[i][0] 的和, 對於第一列的最小路徑只能是grid[0][0] 到grid[0][j]的和, 因為對與第一行和第一列而言都只能沿著直線到達;
class Solution { public: int minPathSum(vector<vector<int>>& grid) { int i, j, x=grid.size(), y=grid[0].size(); vector<vector<int>> dp(x, vector<int>(y, 0)); dp[0][0] = grid[0][0]; for(i=1; i<x; i++) dp[i][0] = dp[i-1][0] + grid[i][0];for(j=1; j<y; j++) dp[0][j] = dp[0][j-1] + grid[0][j]; for(i=1; i<x; i++) for(j=1; j<y; j++) dp[i][j] = min(dp[i][j-1], dp[i-1][j]) + grid[i][j]; return dp[x-1][y-1]; } };
leetcode 64. 最小路徑和