题目要求:
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.
代码一
采用递归方式实现,但是计算超时,不可取。
代码二
#include"stdafx.h"
#include <iostream>
#include<vector>
using namespace std;
class Solution {
public:
int minPathSum(vector<vector<int>> &grid)
{
if (grid.size() == 0 || grid[0].size() == 0)
return 0;
int m=grid.size()-1;
int n=grid[0].size()-1;
vector<vector<int>> sum(m+2,vector<int>(n+2,0));
sum[0][0]=grid[0][0];
for(int i=1;i<=m;i++)
sum[i][0]=grid[i][0]+sum[i-1][0];
for(int j=1;j<=n;j++)
sum[0][j]=grid[0][j]+sum[0][j-1];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
sum[i][j]=min(sum[i-1][j],sum[i][j-1])+grid[i][j];
}
return sum[m][n];
}
};
void main()
{
vector< vector<int>> matrix(3,vector<int>(4,0));
matrix[0][0]=1;
matrix[0][1]=3;
matrix[0][2]=5;
matrix[0][3]=7;
matrix[1][0]=10;
matrix[1][1]=11;
matrix[1][2]=16;
matrix[1][3]=20;
matrix[2][0]=23;
matrix[2][1]=30;
matrix[2][2]=34;
matrix[2][3]=50;
Solution s;
cout<<s.minPathSum(matrix)<<endl;
getchar();
}