Minimum Path Sum

Description:

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.

Code:

 int minPathSum(vector<vector<int>>& grid) {
       int m = grid.size();
       assert(0!=m);
       int n = grid[0].size();
       assert(0!=n);
       
//pathSum[i][j]表示从元素(i,j)到元素(m-1,n-1)即右下角的路径和
       vector<vector<int>>pathSum(grid);
       for (int i = n-2; i >=0; --i)
            pathSum[m-1][i] += pathSum[m-1][i+1];
       for (int i = m-2; i >=0; --i)
            pathSum[i][n-1] += pathSum[i+1][n-1];
            
       for (int i = m-2; i >= 0; --i)
       {
           for (int j = n-2; j >= 0; --j)
           {
                    pathSum[i][j] += min(pathSum[i+1][j], pathSum[i][j+1]);
           }
       }
       return pathSum[0][0];
    }

 

posted @ 2015-06-16 23:34  Rosanne  阅读(159)  评论(0编辑  收藏  举报