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 ...
随机推荐
- Tomcat8启动报there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
09-Dec-2016 10:57:49.150 WARNING [localhost-startStop-1] org.apache.catalina.webresources.Cache.getR ...
- JS小数点加减乘除运算后位数增加的解决方案
/** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失. * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var ...
- AMQP
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.基于此协议的客户端 ...
- ThroughRain第一次冲刺总结
团队名:ThroughRain 项目确定:<餐厅到店点餐系统> 项目背景:本次项目是专门为餐厅开发的一套订餐系统.大家有没有发现在节假日去餐厅吃饭会超级麻烦,人很多, 热门的餐厅基本没有座 ...
- iOS 杂记
一,demo 1,视图跳转 MaryPopin: https://github.com/Backelite/MaryPopin 2,Nimbus是一个开源的iOS框架,比起Three20,Nimbu ...
- 微信开发那点事(No.001)
MXS&Vincene ─╄OvЁ &0000024─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...
- Hudson(Jenkins)持续集成插件开发环境搭建
Hudson持续集成插件开发环境搭建 第一步安装java jdk,至于版本的话推荐1.6以上吧.安装好jdk设置环境变量,确保你在cmd中输入java -version有提示你jdk的版本信息等,也就 ...
- json学习小记
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Asp.net 头像的简单实现
1:创建数据库 Create Table ImageSave ( ID ,), Name ), img image ) 2:上传照片页关键代码 前台: <div> <asp:File ...
- python(二)数据类型
一.整数 创建方法 i = 10 i = int(10) i = int("10",base=2) #“”中是几进制的表示,base是选择要表示的进制,如base=2,用2进制的 ...