leetcode #64 in cpp

原创 2016年05月31日 01:00:16

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.


Solution:

We use DP where dp[i][j] = minimum sum along the path from position(i+1,j+1) to the destination. 

Then dp[i][j] = min(dp[i+1][j], dp[i][j+1]) + grid[i][j]. That is, we select the direction which gives us a smaller sum, when we decide to take the next step.  


Code:

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size(); 
        vector<vector<int>> dp(m, vector<int>(n,0));
        dp[m-1][n-1] = grid[m-1][n-1];
        for(int i = m-2; i >= 0; i --){//right border
            dp[i][n-1] = grid[i][n-1] + dp[i+1][n-1];
        }
        for(int i = n-2; i >= 0; i--){//bottom border
            dp[m-1][i] = grid[m-1][i]+dp[m-1][i+1];
         }
        for(int i = m-2; i >= 0; i --){
            for(int j = n-2; j>=0; j --){
                dp[i][j] = min(dp[i+1][j], dp[i][j+1])+grid[i][j];//compare results from turning right and turning down
            }
        }
        return dp[0][0];
    }
};

One optimization is to update the sum in place in grid instead of using the dp arrays. This saves us some memory. 

【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array(数组中第K大的数)】

【215-Kth Largest Element in an Array(数组中第K大的数)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月28日 06:57
  • 4129

Windows下Python配置theano的一些记录

果然,在windows上配置theano是要死人的。已经记不清是第几天了。好在终于配置好了。很多基于theano的库也可以用了。这里不说具体安装流程,只是简要记录下我遇到的问题以及解决方案。如果有人遇...
  • xingchenbingbuyu
  • xingchenbingbuyu
  • 2016年06月20日 00:29
  • 3566

【LeetCode-面试算法经典-Java实现】【151-Reverse Words in a String(反转字符串中的单词)】

【152-Reverse Words in a String(反转字符串中的单词)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an input strin...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月20日 06:35
  • 2384

leetcode #114 in cpp

Given a binary tree, flatten it to a linked list in-place. For example, Given 1 ...
  • xiaolienahu
  • xiaolienahu
  • 2016年06月18日 22:12
  • 66

leetcode #160 in cpp

Write a program to find the node at which the intersection of two singly linked lists begins. F...
  • xiaolienahu
  • xiaolienahu
  • 2016年06月30日 10:33
  • 136

Leetcode 285. Inorder Successor in BST (Medium) (cpp)

Leetcode 285. Inorder Successor in BST (Medium) (cpp)
  • Niko_Ke
  • Niko_Ke
  • 2016年12月28日 03:38
  • 262

leetcode #139 in cpp

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa...
  • xiaolienahu
  • xiaolienahu
  • 2016年06月25日 11:08
  • 68

leetcode #86 in cpp

Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr...
  • xiaolienahu
  • xiaolienahu
  • 2016年06月12日 11:37
  • 76

leetcode #24 in cpp

The question is to swap each pair in the linked list. And the requirement is to use constant space. ...
  • xiaolienahu
  • xiaolienahu
  • 2016年05月23日 04:14
  • 77

Leetcode 450. Delete Node in a BST (Medium) (cpp)

Leetcode 450. Delete Node in a BST (Medium) (cpp)
  • Niko_Ke
  • Niko_Ke
  • 2016年12月26日 07:50
  • 297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode #64 in cpp
举报原因:
原因补充:

(最多只允许输入30个字)