解法一:动态规划
class Solution {
public int maxValue ( int [ ] [ ] grid) {
int row = grid. length;
int col = grid[ 0 ] . length;
int [ ] [ ] dp = new int [ row] [ col] ;
dp[ 0 ] [ 0 ] = grid[ 0 ] [ 0 ] ;
for ( int i= 1 ; i< row; i++ ) {
dp[ i] [ 0 ] = dp[ i- 1 ] [ 0 ] + grid[ i] [ 0 ] ;
}
for ( int i= 1 ; i< col; i++ ) {
dp[ 0 ] [ i] = dp[ 0 ] [ i- 1 ] + grid[ 0 ] [ i] ;
}
for ( int i = 1 ; i< row; i++ ) {
for ( int j= 1 ; j< col; j++ ) {
int max = Math. max ( dp[ i- 1 ] [ j] , dp[ i] [ j- 1 ] ) ;
dp[ i] [ j] = max+ grid[ i] [ j] ;
}
}
return dp[ row- 1 ] [ col- 1 ] ;
}
}
解法二:优化动态规划
class Solution {
public int maxValue ( int [ ] [ ] grid) {
int row = grid. length;
int col = grid[ 0 ] . length;
for ( int i= 1 ; i< row; i++ ) {
grid[ i] [ 0 ] = grid[ i- 1 ] [ 0 ] + grid[ i] [ 0 ] ;
}
for ( int i= 1 ; i< col; i++ ) {
grid[ 0 ] [ i] = grid[ 0 ] [ i- 1 ] + grid[ 0 ] [ i] ;
}
for ( int i = 1 ; i< row; i++ ) {
for ( int j= 1 ; j< col; j++ ) {
int max = Math. max ( grid[ i- 1 ] [ j] , grid[ i] [ j- 1 ] ) ;
grid[ i] [ j] = max+ grid[ i] [ j] ;
}
}
return grid[ row- 1 ] [ col- 1 ] ;
}
}
时间复杂度:O(N*M) 空间复杂度:O(1)(对原数组进行dp)