1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { private static class Result { private int maxMoves; }
public int maxMoves(int[][] grid) { int m = grid.length, n = grid[0].length;
Result result = new Result();
boolean[][] visited = new boolean[m][n]; for (int i = 0; i < grid.length; i++) { dfs(result, grid, visited, i, 0); }
return result.maxMoves; }
private void dfs(Result result, int[][] grid, boolean[][] visited, int i, int j) { visited[i][j] = true; result.maxMoves = Math.max(result.maxMoves, j); if (j == grid[0].length - 1) { return; }
for (int k = Math.max(i - 1, 0); k <= Math.min(i + 1, grid.length - 1); k++) { if (visited[k][j + 1]) { continue; } if (grid[k][j + 1] > grid[i][j]) { dfs(result, grid, visited, k, j + 1); } } } }
|