题目:假定有一个二维数组,要求将数组中的元素以顺时针的旋转方式打印出来。实现一个函数,使得数组的元素能按照顺时针方向打印。
分析:假定有4个箭头,分别称为top,right,bottom,left。top指向最顶行,right指向最右边一列,bottom指向最底边一行,left指向最左边一列。先把top指向的行打印出来,接着把right指向的列打印出来,然后把bottom指向的行打印出来,最后把left指向的列打印出来。然后把外围打印完毕后,把top箭头向下挪动一个位置,right箭头向左挪动一个位置,bottom向上挪动一个位置,left向右挪动一个位置。
code:
def spiralPrint(top, right, bottom, left):
while top <= bottom and left <= right:
# 先打印top指向的行
for i in range(left, right + 1):
print(array[top][i])
# 打印right指向的行
for i in range(top + 1, bottom + 1):
print(array[i][right])
# 打印bottom指向的行
for i in range(bottom - 1, left - 1, -1):
print(array[bottom][i])
for i in range(bottom - 1, top, -1):
print(array[i][left])
top += 1
right -= 1
bottom -= 1
left += 1
if __name__ == "__main__":
n = 5
array = [[0] * n for i in range(n)]
for i in range(n):
for j in range(n):
array[i][j] = i * n + j + 1
print(array[i])
top = 0
right = n - 1
bottom = n - 1
left = 0
spiralPrint(top, right, bottom, left)
网友评论