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

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

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

示例 1:

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

示例 2:

输入: nums = 
[
  [3,4,5],
  [3,2,6],
  [2,2,1]
] 
输出: 4 
解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object):
def longestIncreasingPath(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: int
"""
memo={}
def helper(i,j):
if (i,j) in memo:
return memo[(i,j)]
ans=1
for k1,k2 in [[0,1],[0,-1],[1,0],[-1,0]]:
if 0<=i+k1<len(matrix) and 0<=j+k2<len(matrix[0]) and matrix[i][j]>matrix[i+k1][j+k2]:
ans=max(ans,1+helper(i+k1,j+k2))
memo[(i,j)]=ans
return ans
ans=0
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if (i,j) not in memo:
ans=max(ans,helper(i,j))
return ans