329. 矩阵中的最长递增路径

给定一个整数矩阵,找出最长递增路径的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。

输入: nums = 
[
  [9,9,4],
  [6,6,8],
  [2,1,1]

输出: 4 
解释: 最长递增路径为 [1, 2, 6, 9]。

1.记忆化搜索

from functools import lru_cache
class Solution:
    def longestIncreasingPath(self, matrix: List[List[int]]) -> int:
        if not matrix:
            return 0
        r, c, d = len(matrix), len(matrix[0]), ((0, 1), (0, -1), (1, 0), (-1, 0))
        @lru_cache(None)
        def f(i, j):
            t = 0
            for di, dj in d:
                x, y = i + di, j + dj
                if 0 <= x < r and 0 <= y < c and matrix[x][y] > matrix[i][j]:
                    t = max(t, f(x, y))
            return t + 1
        return max(f(i, j) for i in range(r) for j in range(c))

 

你可能感兴趣的:(Leetcode)