题目:https://leetcode-cn.com/problems/minimum-path-sum/
2.Java实现
2.1代码1(申请数组)
public static int MinPathSum ( int [ ] [ ] a)
{
int [ ] [ ] dp= new int [ a. length] [ a[ 0 ] . length] ;
dp[ 0 ] [ 0 ] = a[ 0 ] [ 0 ] ;
for ( int i= 1 ; i< a. length; i++ ) {
dp[ i] [ 0 ] = dp[ i- 1 ] [ 0 ] + a[ i] [ 0 ] ;
}
for ( int j= 1 ; j< a[ 0 ] . length; j++ ) {
dp[ 0 ] [ j] = dp[ 0 ] [ j- 1 ] + a[ 0 ] [ j] ;
}
for ( int i= 1 ; i< a. length; i++ ) {
for ( int j= 1 ; j< a[ 0 ] . length; j++ ) {
dp[ i] [ j] = Math. min ( dp[ i- 1 ] [ j] , dp[ i] [ j- 1 ] ) + a[ i] [ j] ;
}
}
for ( int i= 0 ; i< dp. length; i++ ) {
for ( int j= 0 ; j< dp[ 0 ] . length; j++ ) {
System. out. print ( dp[ i] [ j] + "\t" ) ;
}
System. out. println ( ) ;
}
return dp[ dp. length- 1 ] [ dp[ 0 ] . length- 1 ] ;
}
2.2代码2(借助原数组)
class Solution {
public int minPathSum ( int [ ] [ ] grid) {
int n= grid. length, m= grid[ 0 ] . length;
for ( int i= 1 ; i< n; i++ )
{
grid[ i] [ 0 ] += grid[ i- 1 ] [ 0 ] ;
}
for ( int j= 1 ; j< m; j++ )
{
grid[ 0 ] [ j] += grid[ 0 ] [ j- 1 ] ;
}
for ( int i= 1 ; i< n; i++ )
{
for ( int j= 1 ; j< m; j++ )
{
grid[ i] [ j] += Math. min ( grid[ i- 1 ] [ j] , grid[ i] [ j- 1 ] ) ;
}
}
return grid[ n- 1 ] [ m- 1 ] ;
}
}