#动态规划 LeetCode 64 最小路径和

Posted Rainxbow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#动态规划 LeetCode 64 最小路径和相关的知识,希望对你有一定的参考价值。

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

思路:
  • 做动态规划的题目还是习惯目的性的思考:找状态转移方程>明确函数定义>确定结果(过程)记录数据结构。
  • 数据结构:既然题目给了一个二维数组记录每一步,那么很自然的,我们也可以使用一个同样大小的二维数组记录到当前位置所要步骤。
  • 函数定义:确定每个位置所需步数。
  • 状态转移方程:F(i,j) = F(i+1,j) +F(i,j+1)分别对应下和右。
  • 最小子问题为F(m-1,n-1) = grid(m-1, n-1)
  • 另外记得边界是没有下或者右的。
  • 根据状态转移方程,迭代即可求出结果。



class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        if(m ==0)
            return 0;
        int n = grid[0].length;
        
        for(int i = m-1 ; i>= 0 ;i--)
            for( int j = n-1 ; j>=0 ; j--){
                if(i == m-1){
                    if(j!=n-1)
                        grid[i][j] = grid[i][j]+grid[i][j+1];
                }
                else{
                    if(j!=n-1)
                        grid[i][j] = grid[i][j] + (int)Math.min(grid[i][j+1],grid[i+1][j]);
                    else
                        grid[i][j] = grid[i][j] + grid[i+1][j];
                }
            }
        return grid[0][0];
    }
}

 






以上是关于#动态规划 LeetCode 64 最小路径和的主要内容,如果未能解决你的问题,请参考以下文章

leetcode64题 最小路径和 动态规划和深搜

leetcode64题 最小路径和 动态规划和深搜

leetcode64题 最小路径和 动态规划和深搜

Leetcode——64. 最小路径和

LeetCode 64. 最小路径和

leetcode(64)最小路径和