寫完上一題(比樓下),這一題就變成一塊蛋糕了(竊笑)
還是比較喜歡把初始值拉出來寫,不過就會多兩個回圈長在code裡面,似乎不討喜XD
修一修把它們用一個迴圈解決,就比較像leetcode上面會被貼出來的解法 XD
以上兒~~~
#define min(A,B) (A < B)?(A):(B)
#if 1
int minPathSum(int** grid, int gridSize, int* gridColSize){
int i,j;
for (i=0;i<gridSize;i++)
for (j=0;j<(*gridColSize);j++)
{
if (i>0 && j>0)
grid[i][j] +=min(grid[i-1][j], grid[i][j-1]);
else if (i==0 && j==0)
continue;
else if (i==0)
grid[0][j]+=grid[0][j-1];
else if (j==0)
grid[i][0]+=grid[i-1][0];
}
return grid[gridSize-1][(*gridColSize)-1];
}
#else
int minPathSum(int** grid, int gridSize, int* gridColSize){
int m=gridSize;
int n= *gridColSize;
int i,j;
for (j=1;j<n;j++)
grid[0][j]+=grid[0][j-1];
for (i=1;i<m;i++)
grid[i][0]+=grid[i-1][0];
for (i=1;i<m;i++)
for (j=1;j<n;j++)
{
int tmp = min(grid[i-1][j], grid[i][j-1]);
grid[i][j] +=tmp;
}
return grid[m-1][n-1];
}
#endif
沒有留言:
張貼留言