diff --git a/medium/maximum_number_of_moves_in_a_grid.py b/medium/maximum_number_of_moves_in_a_grid.py new file mode 100644 index 0000000..34ea403 --- /dev/null +++ b/medium/maximum_number_of_moves_in_a_grid.py @@ -0,0 +1,28 @@ +# https://leetcode.com/problems/maximum-number-of-moves-in-a-grid +from typing import List + +DIRS = [[-1, 1], [0, 1], [1, 1]] +class Solution: + def maxMoves(self, grid: List[List[int]]) -> int: + memo = [[-1] * len(l) for l in grid] + def recurse(y, x, curr: int) -> int: + ret = curr + if memo[y][x] != -1: + return memo[y][x] + for [new_y, new_x] in DIRS: + new_y += y + new_x += x + if new_y >= len(grid) or \ + new_y < 0 or \ + new_x >= len(grid[0]) or \ + new_x < 0 or \ + grid[new_y][new_x] <= grid[y][x]: + continue + ret = max(ret, recurse(new_y, new_x, curr + 1)) + memo[y][x] = ret + return ret + ret = 0 + for y in range(len(grid)): + ret = max(ret, recurse(y, 0, 0)) + return ret +