LintCode110 最小路径和

问题:

给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
你在同一时间只能向下或者向右移动一步

分析:

  • F(n,m)表示棋盘大小为n*m时走法数量
  • F(n,m) = F(n-1,m) + F(n,m-1)
  • 棋盘退化成条状时边界处理(此时只有一个方向)

代码:

直观理解,开二维数组

int minPathSum(vector > &grid) {
        // write your code here
        int m = grid.size();
        int n = grid[0].size();
        vector> dp(m,vector(n,0));
        dp[0][0]=grid[0][0];
        for(int i=1;i

省去一维(习惯上保留一行,严格来说应该保留m,n中长度较小的一个)

int minPathSum(vector > &grid) {
        // write your code here
        int m = grid.size();
        int n = grid[0].size();
        vector dp(n);
        dp[0]=grid[0][0];
        for(int j=1;j

你可能感兴趣的:(LintCode110 最小路径和)