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

来源:互联网 发布:微信点赞用什么软件好 编辑:程序博客网 时间:2024/06/05 14:32

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
原创粉丝点击