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.
DFS with Memoization
Since we want to find the longest *increasing* path, there are no cycles (it's a Directed Acyclic Graph). We can use DFS to explore all possible paths from each cell. To avoid redundant computations, we store the result of each cell in a memoization table. The longest path from a cell `(r, c)` is `1 + max(longest paths of neighbors with greater values)`.