/**
* 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.
*/
/*
* 动态规划题目,思路是把每一个点的最小和求出来,最后返回右下角的点。
* 每个点的最小和就是比较它左边和上边的点,把较小的那个和本身加起来
* 首先应该吧最左边列和最上边一行的点的最小和求出,因为后边要用到,且他们的最小和求法和中间的不一样
* 难点:初始值很多,是左边一列和上边一行所有的点,都可以直接求出*/
public class Q64MinimumPathSum {
public static void main(String[] args) { }
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
//求出最左边一行的每个点对应的最小和
for (int i = 1; i < m; i++) {
grid[i][0] += grid[i-1][0];
}
//最上边行的
for (int i = 1; i < n; i++) {
grid[0][i] += grid[0][i-1];
}
//前两个是判断特殊情况
if (m == 1)
return grid[0][n-1];
else if (n == 1)
return grid[m-1][0];
//动态规划主体
else
{
int temp;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
//求该点的最小和
temp = Math.min(grid[i-1][j],grid[i][j-1]);
grid[i][j] += temp;
}
}
//右下角的点
return grid[m-1][n-1];
}
}
}

最新文章

  1. Struts2实现ajax的两种方式
  2. prefix pct文件配置Xcode
  3. 已知树的前序、中序,求后序的c++实现&amp;已知树的后序、中序,求前序的c++实现
  4. Javascript备忘模式
  5. maven常用插件配置
  6. spring源码分析
  7. hadoop-2.6.0源码编译
  8. iso data 聚类算法
  9. C#操作SQLServer2012类
  10. wtf_1234
  11. 结对作业——WordCount进阶版
  12. android 上下边框线
  13. 使用VI编辑器在Linux下编写Java文件
  14. [DAViCHi/SeeYa/T-ARA][원더우먼][Wonder Woman]
  15. java异常处理及自定义异常的使用
  16. JS基本动画
  17. Java实现Websocket
  18. linux系统中python版本升级
  19. 【Semantic Segmentation】Segmentation综述
  20. LightGBM

热门文章

  1. Android开发环境及Hello World程序
  2. 汇编中的inc和dec
  3. 【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底
  4. node-sass版本问题
  5. 音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍
  6. 第15.3节 PyCharm程序调试功能介绍
  7. 静湖ABC段扫描器(长更)
  8. 百度前端技术学院-基础-day22-24
  9. OI学习过程记录
  10. 算法——1~n 整数中 1 出现的次数