4/08/2014

Leetcode -- Minimum Path Sum

class Solution {  
 public:  
   int minPathSum(vector<vector<int> > &grid) {  
     int m = grid.size();  
     int n = grid[0].size();  
     vector<vector<int> > dp(m, vector<int>(n, -1));  
     dp[m - 1][n - 1] = grid[m - 1][n - 1];  
     return minPathSum(grid, dp, 0, 0);  
   }  
  int minPathSum(vector<vector<int> > &grid, vector<vector<int> >& dp, int x, int y) {  
     int down = INT_MAX;  
     if(x < grid.size() - 1) {  
       if(dp[x + 1][y] != -1) {  
         down = dp[x+1][y];  
       } else {  
         down = minPathSum(grid, dp, x + 1, y);  
       }  
     }  
     int right = INT_MAX;  
     if(y < grid[0].size() - 1) {  
       if(dp[x][y + 1] != -1) {  
         right = dp[x][y + 1];  
       } else {  
         right = minPathSum(grid, dp, x, y + 1);  
       }  
     }  
        if(dp[x][y] == -1) {  
     dp[x][y] = (right > down ? down : right) + grid[x][y];  
        }  
     return dp[x][y];  
   }  
 };  

No comments: