作者简介:
👨🎓一位20级的计科专业的新手,请各位大佬多多指教
🏡个人主页:XiaoChen_Android
📚学习专栏:力扣专栏
🕒发布日期:2022/8/5
『LeetCode|每日一题』礼物的最大价值
1.每日一题
2.解题思路
2.1 思路分析
此题不难发现为经典动态规划问题,我们可以选择创建一个dp[][]数组来存储礼物的价值,但是为了减小空间复杂度,我们也可以在原来的二维矩阵上直接修改,降低消耗;
S1:先求得二维矩阵的行row和列column,分别等于grid.length和grid[0].length;
S2:遍历数组,求得每一个位置的礼物最大价值,由于每次只能向右或者向下移动,此时要分四种情况来讨论:
- row = 0 && column = 0:此时则继续遍历即可;
- row = 0,column != 0:grid[row][column] = grid[row][column-1];//第0行右边的数据只能由左边相邻的数据得来;
- row != 0,column = 0:grid[row][column] = grid[row - 1][column];//第0列下面的数据只能由上边相邻的数据得来;
- row != 0 && column != 0:grid[row][column] = Math.max(grid[row][column-1],grid[row - 1][column]);
S3:最后得到矩阵右下角的数据即为答案--->grid[row - 1][column - 1]。
2.2 核心代码
for(int i = 0;i < row;i++){
for(int j = 0;j < column;j++){
if(i == 0 && j == 0){
continue;
}else if(i == 0){
grid[i][j] += grid[i][j - 1];
}else if(j == 0){
grid[i][j] += grid[i - 1][j];
}else {
grid[i][j] += Math.max(grid[i][j - 1] , grid[i - 1][j]);
}
}
}
2.3 全部代码
class Solution {
public int maxValue(int[][] grid) {
int row = grid.length;
int column = grid[0].length;
for(int i = 0;i < row;i++){
for(int j = 0;j < column;j++){
if(i == 0 && j == 0){
continue;
}else if(i == 0){
grid[i][j] += grid[i][j - 1];
}else if(j == 0){
grid[i][j] += grid[i - 1][j];
}else {
grid[i][j] += Math.max(grid[i][j - 1] , grid[i - 1][j]);
}
}
}
return grid[row - 1][column - 1];
}
}
🍁 类似题目推荐:
如果文章对你有帮助就支持一下噢,新手尝试,如有不好的地方请各位大佬多多指教!