//和机器人走格子一样解法
public int jewelleryValue(int[][] frame) {
int m = frame.length;
int n = frame[0].length;
int [][] dp = new int [m][n];
dp[0][0] = frame[0][0];
//初始化数组
for (int i = 1; i < m; i++) {
dp[i][0] = frame[i][0] + dp[i-1][0];
}
for (int j = 1; j < n; j++) {
dp[0][j] = frame[0][j] + dp[0][j-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])+frame[i][j];
}
}
return dp[m-1][n-1];
}
共以下 8 个回答
解题思路
– 类似于最小路径和,这里就不过多解答了
【题解1】
时间复杂度O(N∗M),空间复杂度O(1)。
O(mn),将一步步求最大
思路:与最小路径和相似
class Solution {
public int jewelleryValue(int[][] frame) {
int m = frame.length, n = frame[0].length;
int[][] dp = new int[m][n];
dp[0][0] = frame[0][0];
for(int i = 1; i < m; i++){
dp[i][0] = dp[i-1][0] + frame[i][0];
}
for(int j = 1; j < n; j++){
dp[0][j] = dp[0][j-1] + frame[0][j];
}
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]) + frame[i][j];
}
}
return dp[m-1][n-1];
}
}
时间:O(mn)
空间:o(mn)
和前面有一题一样的解法
//和机器人走格子一样解法
public int jewelleryValue(int[][] frame) {
int m = frame.length;
int n = frame[0].length;
int [][] dp = new int [m][n];
dp[0][0] = frame[0][0];
//初始化数组
for (int i = 1; i < m; i++) {
dp[i][0] = frame[i][0] + dp[i-1][0];
}
for (int j = 1; j < n; j++) {
dp[0][j] = frame[0][j] + dp[0][j-1];
}