最小路徑和

問題描述:

給定一個只含非負整數的m*n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。

 注意事項

你在同一時間只能向下或者向右移動一步

解題思路:

狀態轉移方程 a[i][j]= a[i][j]+max{}a[i-1][j],a[i][j-1]},注意變得情況會簡化

代碼

class Solution {
public:
    /*
     * @param grid: a list of lists of integers
     * @return: An integer, minimizes the sum of all numbers along its path
     */
    int minPathSum(vector<vector<int>> &grid) {
        // write your code here
        int m=grid.size();
        int n=grid[0].size();
       if(m==1&&n==1) return grid[0][0];
        else
        {int a[m][n];
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {  
                a[i][j]=grid[i][j];
                if(i==0&&j==0) a[i][j]=grid[i][j];
                else
                {
                    
                    if(j>0)
                    {
                        
                        if(i==0) a[0][j]+=a[0][j-1];
                        else
                        {
                            if(a[i-1][j]<a[i][j-1]) a[i][j]+=a[i-1][j];
                            else a[i][j]+=a[i][j-1];
                        }
                    }
                    else a[i][0]+=a[i-1][0];
                }
            } 
        }
        return a[m-1][n-1];
        }
    }
};

感想

這個題目比較簡單,狀態轉移方程比較好找。

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