在试图为数字1到平方(N)创建N×N螺旋矩阵时,使用通常的螺旋矩阵算法,在其中一行中有一个即使在复查时也找不到的意外输出。
def getSpiralOrder(N):
matrix = [ [ 0 for i in range(N) ] for j in range(N) ]
c = 1
rS = 0
rE = len(matrix)
cS = 0
cE = len(matrix[0])
while(rS < rE and cS < cE):
for i in range(cS , cE ):
matrix[rS][i]=c
c = c + 1
rS += 1
for i in range(rS , rE):
matrix[i][cE - 1]=c
c = c + 1
cE -= 1
for i in range(cS , cE):
matrix[rE - 1][cE - i - 1]=c
c =c + 1
rE -= 1
for i in range(rS,rE):
matrix[rE - i ][cS]=c
c = c + 1
cS += 1
return(matrix)
n = int(input())
print(getSpiralOrder(n))
输出应该是:[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16 , 15, 6], [10, 9, 8, 7]]
但是接下来的输出是:[[1, 2, 3, 4], [12, 13, 14, 5], [16, 0, 15, 6], [10, 9, 8, 7]]
原来除了第三行之外,所有行都是正确的。
发布于 2022-05-12 07:01:53
最后两个for循环是错误的:
def getSpiralOrder(N):
matrix = [ [ 0 for i in range(N) ] for j in range(N) ]
c = 1
rS = 0
rE = len(matrix)
cS = 0
cE = len(matrix[0])
while(rS < rE and cS < cE):
for i in range(cS , cE ):
matrix[rS][i]=c
c = c + 1
rS += 1
for i in range(rS , rE):
matrix[i][cE - 1]=c
c = c + 1
cE -= 1
# should go from cE - 1 not cE - cS - 1
for i in range(cE-cS):
matrix[rE - 1][cE - i - 1]=c
c =c + 1
rE -= 1
# similar here
for i in range(rE-rS):
matrix[rE - i -1][cS]=c
c = c + 1
cS += 1
return(matrix)
https://stackoverflow.com/questions/72217615
复制相似问题