給定乙個包含非負整數的 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 表示從開始點到該點...