• 64. Minimum Path Sum


    https://leetcode.com/problems/minimum-path-sum/

    本题大意:给出一个m*n的表格,里面存储了m*n个非负整数,在从左上角走到右下角的路径中(要求每次只允许向下或者向右一步),找出路径中经历的最小的数字之和。

    解题思路:用f[i][j]表示从原点出发到第i行第j列所经历的最小和,则f[i][j]的前一步要么是f[i][j-1],要么是f[i-1][j],选择其中的最小值与该步本身的数字相加,就可以得到f[i][j]。但是要注意表格的边界要做特殊处理,边界上只有一个方向可以走。

    从以上可以看出,该题是典型的动态规划。

    代码如下:

     1 class Solution {
     2 public:
     3     int minPathSum(vector<vector<int> >& grid) {
     4         int row = grid.size();
     5         int col = grid[0].size();
     6         if(row == 0) return 0;
     7 
     8         int f[row][col];
     9         for(int i = 0; i < row; i++)
    10         {
    11             for(int j = 0; j < col; j++)
    12             {
    13                 f[i][j] = grid[i][j];
    14             }
    15         }
    16         for(int i = 0; i < row; i++)
    17         {
    18             for(int j = 0; j < col; j++)
    19             {
    20                 if(i >= 1 && j >= 1)
    21                 {
    22                     f[i][j] += min(f[i-1][j], f[i][j-1]);
    23                 }
    24                 else if(i >= 1) f[i][j] += f[i-1][j];
    25                 else if(j >= 1) f[i][j] += f[i][j-1];
    26             }
    27         }
    28         return f[row-1][col-1];
    29     }
    30 };
  • 相关阅读:
    IDS与IPS功能分析
    CentOS 命令大全
    仿京东放大镜
    CSS垂直水平居中方法总结
    Java学习之计算机基础(一)
    Java 代码学习之理解数据类型中的坑
    Java 代码学习之数组的初始化
    Java中的比较总结
    Java Random介绍
    手机网站开发必修课[2]:浏览器兼容性测试
  • 原文地址:https://www.cnblogs.com/jingyuewutong/p/5583615.html
Copyright © 2020-2023  润新知