思路:
动态规划dp
代码:
class Solution {
public int maxValue(int[][] grid) {
int m=grid.length;
int n=grid[0].length;
int[][] dp=new int[m+1][n+1];
//0行0列就算不初始化也是默认为0,所以从1开始就行
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
}
}
return dp[m][n];
}
}
分解:
1)创建dp时多创建一行一列,解决边界问题
dp普遍比数组要多一行或一列或一行一列
复杂度分析:
时间复杂度:O(MN)每行每列都要遍历到
空间复杂度:O(MN)dp数组存储了M*N个元素,也就是全部元素