LeetCode-64-Minimum Path Sum(动态规划)-Medium

1. 题意理解:

对于MxN矩阵,求解从(0,0)点到(M-1,N-1)点的路径中,每个方格中的数值之和最小的路径。其中,每次只能从左向右,从上向下移动;


2. 题目分析:

1. 典型的动态规划题目;

2. 记录过程中的结果,避免重复计算,否则会超时;


3. 解题代码:

public class Solution {
    private int maxPath=0;
    private int[][] recordArray;
    private int minSubPathSum(int[][] grid, int r, int c){
        if(r==1 && c==1){
            return grid[0][0];
        }
        
        int subPathSumLeft=maxPath;
        int subPathSumTop=maxPath;
        
        int rIndex=r-1;
        int cIndex=c-1;
        
        if(c-1>0){
            if(recordArray[rIndex][cIndex-1]==-1){
                recordArray[rIndex][cIndex-1]=minSubPathSum(grid, r, c-1);
            }
            
            subPathSumLeft=recordArray[rIndex][cIndex-1];
            //System.out.println("subPathSumLeft= "+subPathSumLeft);
        }
        if(r-1>0){
            if(recordArray[rIndex-1][cIndex]==-1){
                recordArray[rIndex-1][cIndex]=minSubPathSum(grid, r-1, c);
            }
            subPathSumTop=recordArray[rIndex-1][cIndex];
            //System.out.println("subPathSumTop= "+subPathSumTop);
        }
        
        int min=subPathSumLeft<subPathSumTop?subPathSumLeft:subPathSumTop;
        return min+grid[rIndex][cIndex];
    }
    
    public int minPathSum(int[][] grid) {
        int row=grid.length;
        int col=grid[0].length;
        
        recordArray=new int[row][col];
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                maxPath+=grid[i][j];
                recordArray[i][j]=-1;
            }
        }
        
        return minSubPathSum(grid, row, col);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值