思路:
使用Col1和Row1变量记录左上角坐标,使用Col2和Row2变量记录右下角坐标,
两个角固定了这个矩阵,设置初始值CurR=0,CurC=0,从左上角开始,然后分四部分打印一圈:
当CurC<Col2时,打印并CurC++
当CurR<Row2时,打印并CurR++
当CurC>Col1时,打印并CurC--
当CurR>Row1时,打印并CurR--
注意打印时考虑特例一行或一列的情况
在大循环中,每次打完一圈以后,左上坐标向右下角移动一格,右下坐标向左上角移动一格,循环退出时即左上角坐标跑到了右下角坐标的下面。
lass Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix: return [] res = [] Col1, Row1 = 0, 0 Col2, Row2 = len(matrix[0])-1, len(matrix)-1 res = [] while Col1 <= Col2 and Row1 <= Row2: self.Printmatrix(res, matrix, Row1, Col1, Row2, Col2) Row1 += 1 Col1 += 1 Row2 -= 1 Col2 -= 1 return res def Printmatrix(self, res, matrix, Row1, Col1, Row2, Col2): if Row1 == Row2: while Col1 <= Col2: res.append(matrix[Row1][Col1]) Col1 += 1 elif Col1 == Col2: while Row1 <= Row2: res.append(matrix[Row1][Col1]) Row1 += 1 else: curR = Row1 curC = Col1 while curC < Col2: res.append(matrix[curR][curC]) curC += 1 while curR < Row2: res.append(matrix[curR][curC]) curR += 1 while curC > Col1: res.append(matrix[curR][curC]) curC -= 1 while curR > Row1: res.append(matrix[curR][curC]) curR -= 1