2684. Maximum Number of Moves in a Grid

Difficulty:
Related Topics:
Similar Questions:

    Problem

    You are given a 0-indexed m x n matrix grid consisting of positive integers.

    You can start at any cell in the first column of the matrix, and traverse the grid in the following way:

    Return **the *maximum* number of moves that you can perform.**

    Example 1:

    Input: grid = [[2,4,3,5],[5,4,9,3],[3,4,2,11],[10,9,13,15]]
    Output: 3
    Explanation: We can start at the cell (0, 0) and make the following moves:
    - (0, 0) -> (0, 1).
    - (0, 1) -> (1, 2).
    - (1, 2) -> (2, 3).
    It can be shown that it is the maximum number of moves that can be made.
    

    Example 2:

    
    Input: grid = [[3,2,4],[2,1,9],[1,1,7]]
    Output: 0
    Explanation: Starting from any cell in the first column we cannot perform any moves.
    

    Constraints:

    Solution (Java)

    class Solution {
      int[][] dp;
      int[] dirs = new int[] {-1, 0, 1};
      int m, n, max = 0;
    
      private int maxMoves(int[][] grid, int x, int y) {
        if (y == n-1) return 0;
    
        if (dp[x][y] != -1) return dp[x][y];
    
        dp[x][y] = 0;
        for (var dir : dirs) {
          var x2 = x + dir;
          if (x2 < 0 || x2 == m) continue;
    
          if (grid[x2][y+1] > grid[x][y])
            dp[x][y] = Math.max(dp[x][y], 1 + maxMoves(grid, x2, y+1));
        }
        return dp[x][y];
      }
    
      public int maxMoves(int[][] grid) {
        m = grid.length;
        n = grid[0].length;
    
        dp = new int[m][n];
        for (var row : dp)
          Arrays.fill(row, -1);
    
        for (var i=0; i<m; i++)
          max = Math.max(max, maxMoves(grid, i, 0));
    
        return max;
      }
    }
    

    Explain:

    nope.

    Complexity: