解题思路
以每层圈为单位,遍历矩阵矩阵层数计算方式为:lay_num = (min(width,length)+1)//2
每层分为从左到右、从上到下、从右到左、从下到上四个循环
注意每一层循环的开始位置和结束位置是解决本问题的关键
当某一层只有一行 或者 一列的时候(有可能都满足,即只有一个元素)
就不需要再执行第三个 或者 第四个和循环,否则会被重复输出。
代码
class Solution(object): def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] """ import math if matrix == []: return matrix list1 = [] wide = len(matrix[0]) high = len(matrix) rounds = (min(wide,high)+1)//2 for i in range(rounds): #轮次逐层计算 for j in range(4): #表示4个边,我们顺时针计算 if j == 0: #表示上边 list1 = list1 + [matrix[i][z] for z in range(i,wide - i)] elif j == 1: #表示右边 list1 = list1 + [matrix[z][wide- i -1] for z in range(i + 1,high - i)] elif j == 2 and high - i -1 != i: #下方 list1 = list1 + [matrix[high - i -1][z] for z in range(wide - i - 2,i-1,-1)] elif j == 3 and wide - i - 1 != i: #左边 list1 = list1 + [matrix[z][i] for z in range(high - i - 2,i,-1)] return list1