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.
Analyse: dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
Runtime: 32ms.
1 class Solution { 2 public: 3 int minPathSum(vector<vector<int>>& grid) { 4 if(grid.size() == 0) return 0; 5 int row = grid.size(); //row size 6 int col = grid[0].size(); //column size 7 8 vector<vector<int> > dp; 9 dp = grid; 10 for(int i = 1; i < row; i++) dp[i][0] = dp[i - 1][0] + grid[i][0]; 11 for(int j = 1; j < col; j++) dp[0][j] = dp[0][j - 1] + grid[0][j]; 12 13 for(int i = 1; i < row; i++){ 14 for(int j = 1; j < col; j++){ 15 dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]; 16 } 17 } 18 return dp[row - 1][col - 1]; 19 } 20 };