leetcode(64)最小路径和

最小路径和

解题思路:动态规划+自底向上

在这里其实没必要做空间复杂度的处理,因为没有用多余的空间,所以完全可以用m*n的循环方式

class Solution {
    public int minPathSum(int[][] grid) {
        int xlen = grid.length;
        int ylen = grid[0].length;
        int min =  Math.min(xlen,ylen);
        int max = Math.max(xlen,ylen);
        if(min==xlen){
            for(int i=1;i<xlen+ylen-1;++i){
                for(int j=0;j<min;++j){
                    if(i-j>=0&&i-j<max){
                        if(j==0){
                            grid[j][i-j] += grid[j][i-j-1];
                        }else if(i-j==0){
                            grid[j][i-j] += grid[j-1][i-j];
                        }else{
                            grid[j][i-j] += Math.min(grid[j][i-j-1],grid[j-1][i-j]);
                        } 
                    }
                }
            }
        }else{
            for(int i=1;i<xlen+ylen-1;++i){
                for(int j=0;j<min;++j){
                    if(i-j>=0&&i-j<max){
                        if(j==0){
                            grid[i-j][j] += grid[i-j-1][j];
                        }else if(i-j==0){
                            grid[i-j][j] += grid[i-j][j-1];
                        }else{
                            grid[i-j][j] += Math.min(grid[i-j][j-1],grid[i-j-1][j]);
                        } 
                    }
                }
            }
        }
        return grid[xlen-1][ylen-1];
    }
}

猜你喜欢

转载自www.cnblogs.com/erdanyang/p/11249144.html