最小路徑和

2021-09-26 19:34:47 字數 1077 閱讀 8772

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

說明:每次只能向下或者向右移動一步。

示例:輸入:

[[1,3,1],

[1,5,1],

[4,2,1]

]輸出: 7

解釋: 因為路徑 1→3→1→1→1 的總和最小。

看到這一題,第一想法是求2x2的正方形的對角線元素,先一行的求對角線元素的最小路徑和,然後在平移正方形再求另一行的正方形對角線的最小路徑和,可是會報錯,**如下:

class solution {

public:

int minpathsum(vector>& grid) {

int n = grid.size();

if(n==0)

return 0;

int m = grid[0].size();

if(m==0)

return 0;

if(n==1){

int sum;

for(int i=0;i然後就再改正自己的方法,這樣,我們將第一行和第一列的數都求他們距離原點的路徑和,然後求grid[i][j]=min(grid[i-1][j],grid[i][j-1]);這樣依次更新

class solution {

public:

int minpathsum(vector>& grid) {

int row = grid.size();

if(row==0)

return 0;

int col = grid[0].size();

if(col==0)

return 0;

for(int i=1;i這樣好的原因就是他的i,j並不是從0開始的恩恩.,當然不是呀,上面第一種方法考慮的是更行grid[i][j]=grid[i-1][j-1]+grid[i-1][j]+grid[i][j-1];

這種方法最致命的缺點是數大的時候溢位

而下面的方法是

先更新原點處的行和列,之後grid[i][j]=grid[i-1][j]+grid[i][j-1];這裡面少計算了乙個數呀,這才是最精彩的

最小路徑和

給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。注意事項 你在同一時間只能向下或者向右移動一步 這道題和之前做的一道三角形的動態規劃差不多,但是更難一些,例a b c d e f g h i 如果要到i就必須從f 或h走,只要選出其中較小的即可,再用遞迴算出走每乙...

最小路徑和

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。1 動態規劃 1,要明白上邊界線的點只能由它的上乙個點向右移...

最小路徑和

題目 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。動態規劃 用乙個dp m n 表示從開始點到該點...