leetcode 64: 最小路径和

类似于leetcode 62,63,https://blog.csdn.net/u013263891/article/details/84594206

https://blog.csdn.net/u013263891/article/details/84594645

使用动态规划可简单的解决,数组中存放的是第一个位置到该位置所需要的最小的路径,第一行第一列的最小为当前的次数加上前面的最小路径   比如 上面的数组  第一行第二列的值应为1+3=4

而对于不是第一行和第一列 数组值为[i-1][j]+[i][j] 和[i][j-1]+[i][j]中较小的一个

比如上面数组得出的路径最小数组为

[1,1+3=4,4+1=5]

[1+1=2,min{1+5,3+5}=6,min{5+1,6+1}=6]

[2+2=4,min{4+2,6+2}=6,min{6+1,6+1}=7]

输出数组最后一个值即为最短路径

int minPathSum(std::vector<std::vector<int>>& grid) {
    std::vector<std::vector<int>> cc;
    std::vector<int>v;
    int m=grid.size();
    int n=grid[0].size();

    for(int i=1;i<m;i++){
        grid[i][0]+=grid[i-1][0];
    }
    for(int i=1;i<n;i++){
        grid[0][i]+=grid[0][i-1];
    }
    for(int i=1;i<m;i++){
        for(int j=1;j<n;j++){
            grid[i][j]=std::min(grid[i][j]+grid[i-1][j],grid[i][j]+grid[i][j-1]);
        }
    }
    return grid[m-1][n-1];
}

猜你喜欢

转载自blog.csdn.net/u013263891/article/details/84640978