简单的小思路,获取起始坐标和终点坐标,比如:一个n*m的矩阵,起始坐标是(0,0),最后一个位置的坐标是(n,m),很坐标不变,纵坐标从0加到m-1,然后纵坐标不变横坐标加到n-1·······,做完一圈后,终点的横纵坐标都减1,当起始的横纵坐标中任意一个大于终点坐标,立即停止,退出。当只有一行或者一列的时候,只需要加行或者列就行。
def spiralOrder(matrix):
# 获取行和列号
if matrix == []:
return None
line1 = len(matrix[0]) - 1 # 列
line2 = len(matrix) - 1 # 行
total_list = []
start_line1 = 0
start_line2 = 0
start_end_line1 = start_line1
start_end_line2 = start_line2
while start_line1 <= line1 and start_line2 <= line2:
if line1 - start_line1 == 0:
while start_line2 <= line2:
total_list.append(matrix[start_line2][start_line1])
start_line2 += 1
return total_list
elif line2 - start_line2 == 0:
while start_line1 <= line1:
total_list.append(matrix[start_line2][start_line1])
start_line1 += 1
return total_list
while start_line1 < line1:
total_list.append(matrix[start_line2][start_line1])
start_line1 = start_line1 + 1
while start_line2 < line2:
total_list.append(matrix[start_line2][start_line1])
start_line2 = start_line2 + 1
while start_line1 > start_end_line1:
total_list.append(matrix[start_line2][start_line1])
start_line1 -= 1
while start_line2 > start_end_line2:
total_list.append(matrix[start_line2][start_line1])
start_line2 -= 1
line1 = line1 - 1 # 列
line2 = line2 - 1 # 行
start_line1 += 1
start_line2 += 1
start_end_line1 = start_line1
start_end_line2 = start_line2
return total_list
if __name__ == '__main__':
matrix = [[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
print(spiralOrder(matrix))
完全可以改成递归。自行解决。