動機
評語同48
Problem
Given an m x n
matrix
, return all elements of the matrix
in spiral order.
Example 1:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]Output: [1,2,3,4,8,12,11,10,9,5,6,7]
Constraints:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
Sol
處理matrix的走訪,要先確定
- 怎樣才算走一圈
- 每一圈的長度是多少,怎麼算出來
- 每一圈的起點是多少
分兩邊右上與左下,之後就是依照長度去塞
class Solution:
def spiralOrder(self, ms: List[List[int]]) -> List[int]:
a,b,ret = len(ms), len(ms[0]), []
for i in range((min(a,b)+1)//2):
ret.append(ms[i][i])
for j in range(i+1,i+b):
ret.append(ms[i][j])
for ii in range(i+1,i+a):
ret.append(ms[ii][i+b-1])
if a > 1 and b > 1:
for j in reversed(range(i,i+b-1)):
ret.append(ms[i+a-1][j])
for ii in reversed(range(i+1,i+a-1)):
ret.append(ms[ii][i])
a,b = a-2, b-2
return ret