LeetCode 30天挑戰 Day-18

LeetCode 30 days Challenge - Day 18

本系列將對LeetCode新推出的30天算法挑戰進行總結記錄,旨在記錄學習成果、方便未來查閱,同時望爲廣大網友提供幫助。


Minimum Path Sum

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

Example:

Input:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.

Solution

題目要求分析:給定一個m x n的數組,每個元素代表該位置的路徑代價,只能向下或向右移動,計算從左上角到右下角的最小代價路徑。

解法:

非常簡單的動態規劃思想:

  1. 對每個位置,只能從上方或左邊到來。
  2. 對第一行、第一列的位置,只能從左邊、上方到來。
  3. 對其他位置,將路徑代價從左到右、從上到下地更新爲 該位置代價 + min(上方代價,左邊代價) 即可。

最後,右下角元素的值即爲最小代價路徑。


int minPathSum(vector<vector<int>>& grid) {
    for (int i = 0; i<grid.size(); i++) {
        for (int j = 0; j<grid[0].size(); j++) {
            if (i == 0 && j > 0) grid[i][j] += grid[i][j-1];
            else if (i > 0 && j == 0) grid[i][j] += grid[i-1][j];
            else if (i > 0 && j > 0) grid[i][j] += min(grid[i-1][j], grid[i][j-1]);
        }
    }
    return grid.back().back();
}

傳送門:Minimum Path Sum

2020/4 Karl

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