题目:原题链接(困难)
标签:深度优先搜索、记忆化递归、拓扑排序
| 解法 | 时间复杂度 | 空间复杂度 | 执行用时 | 
| Ans 1 (Python) | O ( N × M ) | O ( N × M ) | 552ms (42.32%) | 
| Ans 2 (Python) | |||
| Ans 3 (Python) | 
解法一:
class Solution:
    def __init__(self):
        self.s1, self.s2 = 0, 0
        self.matrix = [[]]
        self.dp = [[]]
        self.ans = 0
    def longestIncreasingPath(self, matrix: List[List[int]]) -> int:
        if not matrix or not matrix[0]:
            return 0
        self.s1, self.s2 = len(matrix), len(matrix[0])
        self.matrix = matrix
        self.dp = [[-1] * self.s2 for _ in range(self.s1)]
        for i1 in range(self.s1):
            for i2 in range(self.s2):
                self.dfs(i1, i2)
        return self.ans
    def dfs(self, i1, i2):
        # 处理记忆化的情况
        if self.dp[i1][i2] != -1:
            return self.dp[i1][i2]
        res = 0
        for j1, j2 in self.get_next(i1, i2):
            res = max(res, self.dfs(j1, j2))
        res += 1
        self.dp[i1][i2] = res
        self.ans = max(self.ans, res)
        return res
    def is_valid(self, i1, i2):
        return 0 <= i1 < self.s1 and 0 <= i2 < self.s2
    def get_next(self, i1, i2):
        res = []
        for j1, j2 in [(i1 - 1, i2), (i1 + 1, i2), (i1, i2 - 1), (i1, i2 + 1)]:
            if self.is_valid(j1, j2) and self.matrix[i1][i2] > self.matrix[j1][j2]:
                res.append((j1, j2))
        return res









