您的位置:首页 > 其它

【leetcode】64. Minimum Path Sum

2016-10-22 23:55 309 查看
一、题目描述

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 的网格,只能向下、向右走。假设sum[i][j] 表示走到第[i][j]个空格时路径的最小值。那么对于第一行的空格有公式:sum[0][j] = sum[0][j-1] + grid[0][j],对于第一列的空格有公式:sum[i][0] = sum[i-1][0] + grid[i][0],对于中间的空格有公式:sum[i][j] = min(sum[i-1][j], sum[i][j-1])
+ grid[i][j]。初始值sum[0][0]=grid[0][0]。从左上走到右下的最短路径就是sum[m-1][n-1]。

c++代码(12ms,50.29%)

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size();
int n=grid[0].size();
int sum[m]
;
sum[0][0]=grid[0][0];
int i,j;
//m为高,n为宽
for(i=1; i<m; i++){
sum[i][0]=sum[i-1][0]+grid[i][0];
}
for(i=1; i<n; i++){
sum[0][i]=sum[0][i-1]+grid[0][i];
}
for(i=1;i<m;i++){
for(j=1;j<n;j++){
sum[i][j]=min(sum[i][j-1],sum[i-1][j])+grid[i][j];
}
}
return sum[m-1][n-1];

}
};

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: