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
| class Solution { int ans = 0; int m, n; bool checkBounds(int i, int j) { return i >= 0 && j >= 0 && i < m && j < n; } vector<vector<int>> mem; int dfs(int i, int j, int len, vector<vector<int>>& grid) { if(checkBounds(i-1, j+1) && grid[i][j] < grid[i-1][j+1]) { mem[i][j] = max(mem[i][j], 1 + (mem[i-1][j+1] == 0 ? (mem[i-1][j+1] = dfs(i-1, j+1, len+1, grid)) : mem[i-1][j+1])); } if(checkBounds(i+1, j+1) && grid[i][j] < grid[i+1][j+1]) { mem[i][j] = max(mem[i][j], 1 + (mem[i+1][j+1] == 0 ? (mem[i+1][j+1] = dfs(i+1, j+1, len+1, grid)) : mem[i+1][j+1])); } if(checkBounds(i, j+1) && grid[i][j] < grid[i][j+1]) { mem[i][j] = max(mem[i][j], 1 + (mem[i][j+1] == 0 ? (mem[i][j+1] = dfs(i, j+1, len+1, grid)) : mem[i][j+1])); } return mem[i][j]; } public: int maxMoves(vector<vector<int>>& grid) { m = grid.size(), n = grid[0].size(); mem = vector<vector<int>>(m, vector<int>(n)); for(int i = 0; i < m; i++) { ans = max(ans, dfs(i, 0, 0, grid)); } return ans; } };
|