首页 > 代码库 > [LeetCode] Minimum Path Sum

[LeetCode] 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.

 

Hide Tags
 Array Dynamic Programming
 
     找矩阵左上到右下的最短路径,标准的动态规划。
  1. 初始化统计矩阵的最上行,最右列。
  2. 从上往下,从左到右填写每格。
  3. 输出结果
 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4  5  6 class Solution { 7 public: 8     int minPathSum(vector<vector<int> > &grid) { 9         int nrow = grid.size();10         if(nrow==0) return 0;11         int ncol = grid[0].size();12         vector<vector<int> > cnt(nrow,vector<int>(ncol,0));13         cnt[0][0] = grid[0][0];14         for(int i =1;i<nrow;i++)15             cnt[i][0]=cnt[i-1][0]+grid[i][0];16         for(int j = 1;j<ncol;j++)17             cnt[0][j]=cnt[0][j-1] + grid[0][j];18         for(int i=1;i<nrow;i++){19             for(int j=1;j<ncol;j++){20                 cnt[i][j] = grid[i][j] + min(cnt[i-1][j],cnt[i][j-1]);21             }22         }23         return cnt[nrow-1][ncol-1];24     }25 };26 27 int main()28 {29     vector<vector<int> > grid({{1,2,3},{4,5,6},{7,8,9}});30     Solution sol;31     cout<<sol.minPathSum(grid)<<endl;32     for(int i=0;i<grid.size();i++){33         for(int j=0;j<grid[i].size();j++)34             cout<<grid[i][j]<<" ";35         cout<<endl;36     }37     return 0;38 }
View Code

 

[LeetCode] Minimum Path Sum