原题题目
代码实现(首刷自解)
class Solution {
public :
int minPathSum ( vector< vector< int >> & grid) {
int m = grid. size ( ) , n = grid[ 0 ] . size ( ) , temp;
for ( int i= 0 ; i< m; ++ i)
{
for ( int j= 0 ; j< n; ++ j)
{
temp = INT_MAX;
if ( i) temp = min ( temp, grid[ i- 1 ] [ j] ) ;
if ( j) temp = min ( temp, grid[ i] [ j- 1 ] ) ;
if ( temp != INT_MAX) grid[ i] [ j] += temp;
}
}
return grid[ m- 1 ] [ n- 1 ] ;
}
} ;
代码实现(二刷自解 DAY 257 C++)
class Solution {
public :
int minPathSum ( vector< vector< int >> & grid) {
int xsize = grid. size ( ) , ysize = grid[ 0 ] . size ( ) ;
vector< vector< int >> dp ( grid. size ( ) , vector < int > ( grid[ 0 ] . size ( ) , INT_MAX) ) ;
for ( int i = 0 ; i < grid. size ( ) ; ++ i)
{
for ( int j = 0 ; j < grid[ 0 ] . size ( ) ; ++ j)
{
if ( ! i && ! j) dp[ i] [ j] = grid[ i] [ j] ;
if ( i) dp[ i] [ j] = min ( dp[ i] [ j] , dp[ i- 1 ] [ j] + grid[ i] [ j] ) ;
if ( j) dp[ i] [ j] = min ( dp[ i] [ j] , dp[ i] [ j- 1 ] + grid[ i] [ j] ) ;
} x
}
return dp[ grid. size ( ) - 1 ] [ grid[ 0 ] . size ( ) - 1 ] ;
}
} ;
代码实现(三刷自解 DAY 287 C++ 未含路径版本)
class Solution {
public :
int minPathSum ( vector< vector< int >> & grid) {
for ( int i = 0 ; i < grid. size ( ) ; ++ i) {
for ( int j = 0 ; j < grid[ 0 ] . size ( ) ; ++ j) {
int tmp = grid[ i] [ j] ;
if ( i && j) grid[ i] [ j] = min ( grid[ i - 1 ] [ j] , grid[ i] [ j - 1 ] ) ;
else if ( i) grid[ i] [ j] = grid[ i - 1 ] [ j] ;
else if ( j) grid[ i] [ j] = grid[ i] [ j - 1 ] ;
if ( i || j) grid[ i] [ j] += tmp;
}
}
return grid[ grid. size ( ) - 1 ] [ grid[ 0 ] . size ( ) - 1 ] ;
}
} ;
代码实现(三刷自解 DAY 287 C++ 含生成路径)
class Solution {
public :
int minPathSum ( vector< vector< int >> & grid) {
vector< vector< int >> tmp;
for ( const auto & vec : grid) {
tmp. emplace_back ( vec) ;
}
for ( int i = 0 ; i < grid. size ( ) ; ++ i) {
for ( int j = 0 ; j < grid[ 0 ] . size ( ) ; ++ j) {
int tmp = grid[ i] [ j] ;
if ( i && j) grid[ i] [ j] = min ( grid[ i - 1 ] [ j] , grid[ i] [ j - 1 ] ) ;
else if ( i) grid[ i] [ j] = grid[ i - 1 ] [ j] ;
else if ( j) grid[ i] [ j] = grid[ i] [ j - 1 ] ;
if ( i || j) grid[ i] [ j] += tmp;
}
}
int x = grid. size ( ) - 1 , y = grid[ 0 ] . size ( ) - 1 ;
while ( 1 ) {
cout << tmp[ x] [ y] << " x,y : " << x << ' ' << y << endl;
if ( ! x && ! y) break ;
if ( x && grid[ x - 1 ] [ y] + tmp[ x] [ y] == grid[ x] [ y] ) {
-- x;
} else {
-- y;
}
}
return grid[ grid. size ( ) - 1 ] [ grid[ 0 ] . size ( ) - 1 ] ;
}
} ;
代码实现(四刷自解 DAY 7 Golang)
func min ( x, y int ) int {
if x <= y {
return x
} else {
return y
}
}
func minPathSum ( grid [ ] [ ] int ) int {
dp := make ( [ ] [ ] int , len ( grid) )
for i := 0 ; i < len ( grid) ; i++ {
dp[ i] = make ( [ ] int , len ( grid[ 0 ] ) )
}
const INT_MAX int = int ( ^ uint ( 0 ) >> 1 )
for i := 0 ; i < len ( grid) ; i++ {
for j := 0 ; j < len ( grid[ 0 ] ) ; j++ {
if i == 0 && j == 0 {
dp[ i] [ j] = grid[ 0 ] [ 0 ]
} else {
dp[ i] [ j] = INT_MAX
}
if j > 0 {
dp[ i] [ j] = min ( dp[ i] [ j] , dp[ i] [ j - 1 ] + grid[ i] [ j] )
}
if i > 0 {
dp[ i] [ j] = min ( dp[ i] [ j] , dp[ i - 1 ] [ j] + grid[ i] [ j] )
}
}
}
return dp[ len ( dp) - 1 ] [ len ( dp[ 0 ] ) - 1 ]
}