leetcode 之 Minimum Path Sum
2016-06-21 18:41
225 查看
题目描述: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.给定一个m*n的矩形a, 计算从a[0][0]到a[m]
的每个数字加起来最小的和. 注意, 每次只能往下或者右查找下一个数字.分析:每次都往右下角寻找. 之前看到一道题, 计算n*n的方形从左上角到又下角最短的距离有多少种走法. 我们先来看这个问题.假设在4*4的格子中, a[i][j] 的值 等于a[i-1][j] + a[j-1][i], 如下图所示:1 1 1 11 2 3 41 3 6 101 4 10 20上面展示的是的最短路径有多少种走法.然后在计算从左上角到右下角最小数字和时,采用动态规划的思想, 每一步的最小取值,依赖其左边和上边的最小值,我们设m[i][j] 是走到第a[i][j]时,最小的元素和, 由上面可以得出,m[i][j] = min(m[i-1][j]+a[i][j], m[i][j-1]+a[i][j])其中: m[i][0] = a[i][0] m[0][j] = a[0][j]代码如下:
的每个数字加起来最小的和. 注意, 每次只能往下或者右查找下一个数字.分析:每次都往右下角寻找. 之前看到一道题, 计算n*n的方形从左上角到又下角最短的距离有多少种走法. 我们先来看这个问题.假设在4*4的格子中, a[i][j] 的值 等于a[i-1][j] + a[j-1][i], 如下图所示:1 1 1 11 2 3 41 3 6 101 4 10 20上面展示的是的最短路径有多少种走法.然后在计算从左上角到右下角最小数字和时,采用动态规划的思想, 每一步的最小取值,依赖其左边和上边的最小值,我们设m[i][j] 是走到第a[i][j]时,最小的元素和, 由上面可以得出,m[i][j] = min(m[i-1][j]+a[i][j], m[i][j-1]+a[i][j])其中: m[i][0] = a[i][0] m[0][j] = a[0][j]代码如下:
class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ n = len(grid) if n == 0: return 0 m = len(grid[0]) a = [[0 for i in range(m)]for j in range(n)] a[0][0] = grid[0][0] for j in range(1, m): a[0][j] = a[0][j-1] + grid[0][j] for i in range(1, n): a[i][0] = a[i-1][0] + grid[i][0] for i in range (1, n): for j in range(1, m): a[i][j] = min(a[i-1][j]+grid[i][j], a[i][j-1]+grid[i][j]) return a[n-1][m-1]
相关文章推荐
- js中时间的大小比较,留着备用!
- Android ImageView 图片靠右,靠左处理
- 对于一个整数n,有一个函数f(n) 可以计算到1到n之间的出现“1“的个数。
- mac 卸载jenkins
- jsp基础
- vSphere: Virtual machine Consolidation Needed status
- Thrift学习(2)-安装
- 内存优化---Bitmap优化
- IT十八掌作业_java基础第十六天_GUI/socket
- asp.net项目配置环境
- PHP中 memcache 基本的增删改查
- Socket Server-基于线程池的TCP服务器
- Inverse+cascade属性
- Angular Bootstrap
- JQuery操作DOM
- 我的Git地址,欢迎大家Fork和Follow。有用的记得Star呀
- behaviors()行为调用
- JAVA-md5加密
- C++实现反射(根据类名动态创建对象)
- 百度地图坐标系相关学习总结