Given an m x n integers matrix, return the length of the longest increasing path in matrix.
From each cell, you can either move in four directions: left, right, up, or down. You may not move diagonally or move outside the boundary (i.e., wrap-around is not allowed).
Example 1:
Input: matrix = [[9,9,4],[6,6,8],[2,1,1]]
Output: 4
Explanation: The longest increasing path is [1, 2, 6, 9].
Example 2:
Input: matrix = [[3,4,5],[3,2,6],[2,2,1]]
Output: 4
Explanation: The longest increasing path is [3, 4, 5, 6]. Moving diagonally is not allowed.
Example 3:
Input: matrix = [[1]]
Output: 1
Constraints:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 200
0 <= matrix[i][j] <= 231 - 1
Solutions
Solution 1: Memoization Search
We design a function \(dfs(i, j)\), which represents the length of the longest increasing path that can be obtained starting from the coordinate \((i, j)\) in the matrix. The answer is \(\max_{i, j} \textit{dfs}(i, j)\).
The execution logic of the function \(dfs(i, j)\) is as follows:
If \((i, j)\) has been visited, directly return \(\textit{f}(i, j)\);
Otherwise, search \((i, j)\), search the coordinates \((x, y)\) in four directions. If \(0 \le x < m, 0 \le y < n\) and \(matrix[x][y] > matrix[i][j]\), then search \((x, y)\). After the search is over, update \(\textit{f}(i, j)\) to \(\textit{f}(i, j) = \max(\textit{f}(i, j), \textit{f}(x, y) + 1)\). Finally, return \(\textit{f}(i, j)\).
The time complexity is \(O(m \times n)\), and the space complexity is \(O(m \times n)\). Where \(m\) and \(n\) are the number of rows and columns of the matrix, respectively.