| 12
 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
 
 | func maxMoves(grid [][]int) int {m := len(grid)
 n := len(grid[0])
 shift := []int{
 -1,
 0,
 1,
 }
 ansMap := make(map[int]int)
 var dfs func(r, c int) int
 dfs = func(r, c int) int {
 if ans, exists := ansMap[r*n+c]; exists {
 return ans
 }
 ans := c - 1
 if c >= n {
 return ans
 }
 for i := 0; i < 3; i++ {
 newR := r + shift[i]
 if newR >= 0 && newR < m && grid[newR][c] > grid[r][c-1] {
 ans = max(ans, dfs(newR, c+1))
 }
 }
 ansMap[r*n+c] = ans
 return ans
 }
 ans := 0
 for i := 0; i < m; i++ {
 ans = max(ans, dfs(i, 1))
 }
 return ans
 }
 
 |