这题的缺陷在变量没有看好,粗心!!!
然后 注意边界 其实很简单~ 不需要回溯
单纯回溯不能解决问题,会超时,因为最长的增长路径是唯一的,所以可以进行记录。下次遇到直接获取。就不用继续走。
这样是不可能出现重复走一个格子的情况的,因为是递增的。能访问到的只可能越来越大。
class Solution:
def longestIncreasingPath(self, matrix: List[List[int]]) -> int:
result = {}
n1 = len(matrix)
m1 = len(matrix[0])
result = {}
def dfs(i, j):
res = 0
if (i, j) in result:
return result[(i, j)]
for n, m in ((i+1, j), (i, j+1), (i-1, j), (i, j-1)):
if n >= n1 or m >= m1 or n < 0 or m < 0: # 变量切记不要弄混!!!!
continue
if matrix[n][m] > matrix[i][j]:
if (n ,m) in result:
res = max(res, result[(n,m)])
else:
res1 = dfs(n, m)
res = max(res, res1)
result[(i,j)] = res + 1
return res + 1
max_len = 0
for i in range(n1):
for j in range(m1):
max_len = max(dfs(i, j), max_len)
return max_len