LeetCode | 64. Minimum Path Sum

来源:互联网 发布:腾讯云和阿里云学生 编辑:程序博客网 时间:2024/04/29 13:07

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.

思路:简单动态规划,考虑用 vector 代替数组,来节省空间。

//数组版,13msclass Solution {public:    int minPathSum(vector<vector<int>>& grid) {        int m = grid.size(), n = grid[0].size();        long long dp[300][300];        dp[0][0] = grid[0][0];        //初始化边界        for(int i=1;i<m;i++)            dp[i][0] = dp[i-1][0]+grid[i][0];        for(int j=1;j<n;j++)            dp[0][j] = dp[0][j-1]+grid[0][j];        //处理中间部分        for(int i=1;i<m;i++)        {            for(int j=1;j<n;j++)            {                dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j];            }        }        return dp[m-1][n-1];    }};//vector版,9msclass Solution {public:    int minPathSum(vector<vector<int>>& grid) {        int m = grid.size(), n = grid[0].size();        vector<vector<int> > dp;        vector<int> line0;        line0.push_back(grid[0][0]);        dp.push_back(line0);        //初始化边界        for(int i=1;i<m;i++)        {            vector<int> tmp;            tmp.push_back(dp[i-1][0]+grid[i][0]);            dp.push_back(tmp);        }        for(int j=1;j<n;j++)            dp[0].push_back(dp[0][j-1]+grid[0][j]);        //处理中间部分        for(int i=1;i<m;i++)        {            for(int j=1;j<n;j++)            {                dp[i].push_back(min(dp[i-1][j],dp[i][j-1]) + grid[i][j]);            }        }        return dp[m-1][n-1];    }};
原创粉丝点击