Minimum Path Sum [LeetCode]
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.
Summary: DP, calucate the minimun sum from start point to every cell unitil we traverse every cell, then just output the last cell.
void goRight(int row_index, int column_index, int **grid_sum, vector<vector<int> > &grid) {
column_index ++ ;
int sum = grid_sum[row_index][column_index - ] + grid[row_index][column_index];
if(grid_sum[row_index][column_index] == - || sum < grid_sum[row_index][column_index])
grid_sum[row_index][column_index] = sum;
} void goDown(int row_index, int column_index, int **grid_sum, vector<vector<int> > &grid ) {
row_index ++;
int sum = grid_sum[row_index -][column_index] + grid[row_index][column_index];
if(grid_sum[row_index][column_index] == - || sum < grid_sum[row_index][column_index])
grid_sum[row_index][column_index] = sum;
} int minPathSum(vector<vector<int> > &grid) {
if( grid.size() <= || grid[].size() <=){
return ;
}else if ( grid.size() == ){
int sum = ;
for (auto item : grid[])
sum += item;
return sum;
}else if (grid.size() > && grid[].size() == ) {
int sum = ;
for ( auto item : grid)
sum += item[];
return sum;
}else {
int row_size = grid.size();
int column_size = grid[].size(); int ** grid_sum = new int *[row_size];
for( int i=; i< row_size; i++ )
{
grid_sum[i] = new int [column_size] ;
} for(int i = ; i< row_size; i ++){
for(int j =; j < column_size; j++)
grid_sum[i][j] = -;
} for(int i = ; i <= (row_size - + column_size -); i++) {
if (i == ) {
int row_index = ;
int column_index = ;
grid_sum[][] = grid[][];
if(row_index + < row_size)
goDown(row_index, column_index, grid_sum, grid);
if(column_index + < column_size)
goRight(row_index, column_index, grid_sum, grid);
}else {
int row_index = ;
int column_index = ;
for(row_index = ; row_index <= i; row_index ++ ){
if(row_index >= row_size )
continue;
column_index = i - row_index;
if(column_index >= column_size)
continue; if(row_index + < row_size)
goDown(row_index, column_index, grid_sum, grid);
if(column_index + < column_size)
goRight(row_index, column_index, grid_sum, grid);
}
}
} int sum = grid_sum[row_size - ][column_size - ];
for( int i=; i< row_size; i++ ) {
delete [] grid_sum[i];
}
delete grid_sum;
return sum;
}
}
Minimum Path Sum [LeetCode]的更多相关文章
- Minimum Path Sum——LeetCode
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- Minimum Path Sum leetcode java
题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ...
- [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )
Unique Paths https://oj.leetcode.com/problems/unique-paths/ A robot is located at the top-left corne ...
- 动态规划小结 - 二维动态规划 - 时间复杂度 O(n*n)的棋盘型,题 [LeetCode] Minimum Path Sum,Unique Paths II,Edit Distance
引言 二维动态规划中最常见的是棋盘型二维动态规划. 即 func(i, j) 往往只和 func(i-1, j-1), func(i-1, j) 以及 func(i, j-1) 有关 这种情况下,时间 ...
- [Leetcode Week9]Minimum Path Sum
Minimum Path Sum 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/minimum-path-sum/description/ Descr ...
- LeetCode 64. 最小路径和(Minimum Path Sum) 20
64. 最小路径和 64. Minimum Path Sum 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明: 每次只能向下或 ...
- Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)
Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...
- 【leetcode】Minimum Path Sum
Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...
- 【LeetCode练习题】Minimum Path Sum
Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...
随机推荐
- Nhiberate (三)测试
(一)添加数据: public void AddUser(User user) { ISession session = NhibernateFactory.GetInstance().GetSess ...
- linux下安装编译php的curl扩展
curl扩展的位置(需要编译的版本)/root/install/php-5.5.24/ext/curl 1.进入对应的扩展目录 # cd /root/install/php-5.5.24/ext/cu ...
- mvc 数据验证金钱格式decimal格式验证
mvc 数据验证金钱格式decimal格式验证 首先看下代码 /// <summary> /// 产品单价 /// </summary> [Display(Name = &qu ...
- RDIFramework.NET开发实例━表约束条件权限的使用-Web
RDIFramework.NET开发实例━表约束条件权限的使用-Web 在上一篇文章“RDIFramework.NET开发实例━表约束条件权限的使用-WinForm”我们讲解了在WinForm下表约束 ...
- Python Decorator 和函数式编程
看到一篇翻译不错的文章,原文链接: Python Decorator 和函数式编程
- JQuery MultiSelect(左右选择框)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- android 多点
引用:http://blog.163.com/fenglang_2006/blog/static/13366231820108205274325/ 第一章摘要 在Linux内核支持的基础上,Andro ...
- mysql中and和or
and的优先级高于or,所以一个sql语句中如果and和or同时出现,则or要加括号
- Shadow Zhang PGPool 配置错误定位 s_do_auth: expecting R got E
自从按照教程 http://www.pgpool.net/docs/latest/pgpool-zh_cn.html#hba配置好PGPool以后,每次启动 pgpool -c -n -D 都报 s_ ...
- Java虚拟机学习(1):体系结构 内存模型
一:Java技术体系模块图 Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态 ...