在Python中给定矩阵的最长递增路径长度的程序

在Python中给定矩阵的最长递增路径长度的程序

假设我们有一个二维矩阵,我们需要找到最长严格递增路径的长度。为了遍历路径,我们可以向上、向下、向左或向右移动,但不能斜向移动。

因此,如果输入为

2 4 6
1 5 7
3 3 9

那么输出将为6,因为最长路径是[1,2,4,6,7,9]

为了解决这个问题,我们将按照以下步骤进行-

n:矩阵的行数,m:矩阵的列数 
moves:向上、向下、向左和向右移动的一对列表[[1, 0], [-1, 0], [0, 1], [0, -1]] 
定义一个函数dp()。这需要y、x 
如果x和y在矩阵的范围内,则 
   返回0 
currVal:=matrix [y,x] 
res:=0 
对于移动的每个d,执行以下操作 
   (dy,dx):=d 
   (newY,newX):=(y + dy,x + dx) 
      如果newY和newX在矩阵的范围内且matrix [newY,newX]>currVal,则 
         res:=res和dp(newY,newX)的最大值 
返回res + 1 
从主方法执行以下操作: 
结果:=0 
for i in range 0 to n - 1,do 
   for j in range 0 to m - 1,do 
      结果:=结果和dp(i,j)的最大值 
返回结果

例子 (Python)

为了更好的理解,让我们看一下以下实现 –

class Solution:
   def solve(self, matrix):
      n, m = len(matrix), len(matrix[0])
      moves = [[1, 0], [-1, 0], [0, 1], [0, -1]]
      def dp(y, x):
         if y < 0 or y >= n or x < 0 or x >= m:
            return 0
         currVal = matrix[y][x]
         res = 0
         for d in moves:
            dy, dx = d
            newY, newX = y + dy, x + dx
            if (newY >= 0 and newY < n and newX >= 0 and newX < m and matrix[newY][newX] > currVal):
               res = max(res, dp(newY, newX))
         return res + 1
      result = 0
      for i in range(n):
         for j in range(m):
            result = max(result, dp(i, j))
      return result
ob = Solution()
matrix = [
   [2, 4, 6],
   [1, 5, 7],
   [3, 3, 9]
]
print(ob.solve(matrix))

输入

[ [2, 4, 6], [1, 5, 7], [3, 3, 9] ]

输出

6

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程