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
| 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 }
|