aNotHeRNo0b
Senior Member
Java:
class Solution {
public int maxMoves(int[][] grid) {
int height = grid.length;
int width = grid[0].length;
int[][] dp = new int[height][width];
for (int i = 0; i < height; i++) {
Arrays.fill(dp[i], 1);
}
int[][] direction = new int[][]{
{-1, 1},
{0, 1},
{1, 1}
};
int ROW = 0;
int COL = 1;
int longestDistance = 0;
for (int c = width - 2; c >= 0; c--) {
for (int r = 0; r < height; r++) {
for (int[] dir : direction) {
if (isOutOfRange(r + dir[ROW], 0, height) || isOutOfRange(c + dir[COL], 0, width)) {
continue;
}
if (grid[r][c] < grid[r + dir[ROW]][c + dir[COL]]) {
dp[r][c] = Math.max(
dp[r][c],
dp[r + dir[ROW]][c + dir[COL]] + 1
);
if (c == 0) {
longestDistance = Math.max(
longestDistance,
dp[r][c] - 1
);
}
}
}
}
}
return longestDistance;
}
public boolean isOutOfRange(int cur, int min, int max) {
return cur < min || cur >= max;
}
}




