LeetCode-in-Java

2684. Maximum Number of Moves in a Grid

Medium

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:

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

import java.util.Arrays;

public class Solution {
    public int maxMoves(int[][] grid) {
        int h = grid.length;
        boolean[] dp1 = new boolean[h];
        boolean[] dp2 = new boolean[h];
        int rtn = 0;
        Arrays.fill(dp1, true);
        for (int col = 1; col < grid[0].length; col++) {
            boolean f = false;
            for (int row = 0; row < h; row++) {
                int pr = row - 1;
                int nr = row + 1;
                dp2[row] = false;
                if (pr >= 0 && dp1[pr] && grid[pr][col - 1] < grid[row][col]) {
                    dp2[row] = true;
                    f = true;
                }
                if (nr < h && dp1[nr] && grid[nr][col - 1] < grid[row][col]) {
                    dp2[row] = true;
                    f = true;
                }
                if (dp1[row] && grid[row][col - 1] < grid[row][col]) {
                    dp2[row] = true;
                    f = true;
                }
            }
            boolean[] t = dp1;
            dp1 = dp2;
            dp2 = t;
            if (f) {
                rtn++;
            } else {
                break;
            }
        }
        return rtn;
    }
}