题目描述
Given an m x n
integers matrix
, return the length of the longest increasing path in matrix
.
From each cell, you can either move in four directions: left, right, up, or down. You may not move diagonally or move outside the boundary (i.e., wrap-around is not allowed).
!https://assets.leetcode.com/uploads/2021/01/05/grid1.jpg
Example 1:
思路
dfs+记忆化,本题可以不必设置visited数组,可以由递增条件实现。时间复杂度O(MN),空间复杂度O(MN)
代码
func longestIncreasingPath(matrix [][]int) int {
mem=make([][]int,len(matrix))
for i:=0;i<len(matrix);i++{
mem[i]=make([]int,len(matrix[0]))
}
res:=0
for i:=0;i<len(matrix);i++{
for j:=0;j<len(matrix[0]);j++
res=max(res,process(matrix,i,j))
}
}
return res
}
var mem [][]int
func process(m [][]int, i,j int) int{
fmt.Println("helo")
fmt.Println(i,j)
fmt.Println(mem[i][j])
if mem[i][j]!=0{
return mem[i][j]
}
res:=0
if i+1<len(m)&&m[i][j]<m[i+1][j]{
res=max(res,process(m,i+1,j))
}
if i-1>=0&&m[i][j]<m[i-1][j]{
res=max(res,process(m,i-1,j))
}
if j+1<len(m[0])&&m[i][j]<m[i][j+1]{
res=max(res,process(m,i,j+1))
}
if j-1>=0&&m[i][j]<m[i][j-1]{
res=max(res,process(m,i,j-1))
}
mem[i][j]=res+1
return res+1
}
func max(a,b int)int{
if a>b{
return a
}
return b
}