Longest Increasing Path in a Matrix

The key idea is to use cache, which later will be revisited!

class Solution(object):
    def longestIncreasingPath(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: int
        """
        if matrix == [] or matrix ==[[]]:
            return 0

        m = len(matrix)
        n = len(matrix[0])
        dp = [[0 for i in range(n)] for j in range(m)]
        self.directions = [[1,0], [-1,0], [0,-1], [0,1]]
        self.long = 0

        def dfs(i, j, m, n, matrix):
            if dp[i][j] > 0:
                return dp[i][j]

            tmp = 1
            for dir in self.directions:
                x, y = i + dir[0], j + dir[1]
                if x < 0 or y < 0 or x >= m or y >= n or matrix[x][y] <= matrix[i][j]:
                    continue

                path = dfs(x, y, m, n, matrix) + 1
                tmp = max(tmp, path)

            dp[i][j] = tmp
            return tmp

        for i in range(m):
            for j in range(n):
                path = dfs(i, j, m, n, matrix)
                self.long = max(self.long, path)

        return self.long

results matching ""

    No results matching ""