螺旋矩阵
Last updated
Last updated
问题简述
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
思路
把矩阵及其元素看作坐标中的点,初始定义左上角和右下角两个点 (0, 0)
和 (m, n)
;
然后根据要求,每次打印一圈,注意边界条件,详见代码;
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param matrix int整型二维数组
# @return int整型一维数组
#
class Solution:
def spiralOrder(self , M: List[List[int]]) -> List[int]:
# write code here
if not M: return []
ret = []
def dfs(a, b, c, d):
# 打印一行 (a,b) -> (a, d)
if a == c:
t = b
while t <= d:
ret.append(M[a][t])
t += 1
# 打印一列 (a, d) -> (c, d)
elif b == d:
t = a
while t <= c:
ret.append(M[t][b])
t += 1
# 打印一圈
else:
# 左到右: (a,b) -> (a, d-1)
t = b
while t < d:
ret.append(M[a][t])
t += 1
# 上到下: (a, d) -> (c-1, d)
t = a
while t < c:
ret.append(M[t][d])
t += 1
# 右到左: (c, d) -> (c, b+1)
t = d
while t > b:
ret.append(M[c][t])
t -= 1
# 下到上: (c, b) -> (a-1, b)
t = c
while t > a:
ret.append(M[t][b])
t -= 1
a, b, c, d = 0, 0, len(M) - 1, len(M[0]) - 1
while a <= c and b <= d:
dfs(a, b, c, d)
a, b = a + 1, b + 1
c, d = c - 1, d - 1
return ret