题目:

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.

代码:

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if ( grid.empty() ) return ;
const int m = grid.size();
const int n = grid[].size();
vector<int> dp(n, INT_MAX);
dp[] = ;
for ( int i=; i<m; ++i )
{
dp[] += grid[i][];
for ( int j=; j<n; ++j )
{
dp[j] = grid[i][j] + std::min(dp[j-], dp[j]);
}
}
return dp[n-];
}
};

tips:

典型的“DP+滚动数组”,时间复杂度O(m*n),空间复杂度O(n)。

=============================================

第二次,用偷懒的做法了,二维dp直接写了。

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if ( grid.empty() ) return ;
int dp[grid.size()][grid[].size()];
fill_n(&dp[][], grid.size()*grid[].size(), );
dp[][] = grid[][];
for ( int i=; i<grid[].size(); ++i ) dp[][i] = dp[][i-]+grid[][i];
for ( int i=; i<grid.size(); ++i ) dp[i][] = dp[i-][]+grid[i][];
for ( int i=; i<grid.size(); ++i )
{
for ( int j=; j<grid[i].size(); ++j )
{
dp[i][j] = min(dp[i][j-],dp[i-][j])+grid[i][j];
}
}
return dp[grid.size()-][grid[].size()-];
}
};

最新文章

  1. Google自己的下拉刷新组件SwipeRefreshLayout
  2. jquery中each()函数
  3. php实现新闻页面
  4. WdatePicker日历控件使用方法(转)
  5. 动画原理——线性来回运动&amp;&amp;波动
  6. 将数据从服务器端同步到手机上, 并且需要离线工作,Couchebase Mobile 也许是目前最好的解决方案:
  7. $(function(){})和$(document).ready(function(){}) 的区别
  8. redis3.2.6 集群安装
  9. redis命令详解
  10. js分析 猫_眼_电_影 字体文件 @font-face
  11. CentOS安装和配置Mysql
  12. Webpack + vue 搭建
  13. springmvc 怎么响应json数据
  14. I2C和I2S的区别和使用方法
  15. WinForm ListView虚拟模式加载数据 提高加载速度
  16. vue+webpack 遇到的问题总结
  17. 笔记函数 - Ring0 Sleep()
  18. python直接下载图片到内存
  19. Redis 操作列表数据
  20. 自定义redis序列化工具

热门文章

  1. 用log4net快速构建asp.net 异常日志
  2. [Asp.Net] Form验证中 user.identity为false
  3. python_12_continue
  4. python_37_文件修改
  5. for循环和数组练习
  6. HTML 5新元素和CSS
  7. C#的接口基础教程之四 访问接口
  8. Oracle 函数 之 wm_concat()
  9. JavaScript获取时间戳与时间戳转化
  10. axios常见传参方式