gpt4 book ai didi

python - 递归地以螺旋顺序打印矩阵

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:30 25 4
gpt4 key购买 nike

我找到的所有答案都是提出迭代解决方案。有解决这个问题的递归方法吗?我有一个看起来很接近但还不太正确的尝试。

假设我有这个矩阵:

matrix = [
["H", "E", "L", "L"],
["N", "I", "E", "I"],
["O", "G", "R", "F"],
["T", "S", "A", "E"]
]

我的函数应该打印...

 HELLIFEASTTONIERG

这是我的代码...

def spiral(matrix, i, j):

if i < 0 or j < 0 or i >= len(matrix) or j >= len(matrix) or matrix[i][j] == False:
return False

print(matrix[i][j])
matrix[i][j] = False

if j < len(matrix) and j >= i:
spiral(matrix, i, j+1)

if i < len(matrix) and i <= j:
spiral(matrix, i+1, j)

if j >= 0 and j <= i:
spiral(matrix, i , j-1)

if i >= 0 and i >= j:
spiral(matrix, i-1, j)

spiral(matrix, 0, 0)

它打印的有点螺旋......

HELLIFEASTONGIER

但这是不正确的。是否有可能以某种方式改变我的功能以获得正确的输出,因为我觉得我很接近。或者有没有其他的递归解决方案?

最佳答案

这是一个递归的解决方案,逐层解决,从最外层开始顺时针:

def spiral(matrix, level=0):
m, n = len(matrix), len(matrix[0]) # MxN matrix

if level >= m // 2 and level >= n // 2:
return # no more layer to solve

left, right, top, bottom = level, n - 1 - level, level, m - 1 - level
for j in range(left, right):
print(matrix[top][j])

for i in range(top, bottom):
print(matrix[i][right])

for j in range(right, left, -1):
print(matrix[bottom][j])

for i in range(bottom, top, -1):
print(matrix[i][left])

spiral(matrix, level=level + 1)

关于python - 递归地以螺旋顺序打印矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48655687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com