剑指 Offer 29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:
return []
res=[]
m_start,m_end,n_start,n_end=0,len(matrix)-1,0,len(matrix[0])-1 #索引
def outsidematrix(m_start,m_end,n_start,n_end):
print(m_start,m_end,n_start,n_end)
if m_start==m_end: #剩一行
return res + matrix[m_start][n_start:n_end+1] #return直接在res上修改 因为res是可变类型,函数里面修改外面也变
if n_start==n_end: #剩一列
for i in range(m_start,m_end+1):
res.append(matrix[i][n_start])
return res
elif m_start>m_end or n_start>n_end: #剩0行
return res
for i in matrix[m_start][n_start:n_end+1]: #顶部 整行
res.append(i)
# print(res)
#res=matrix[0] #这样matrix会跟着res一起变
for i in range(m_start+1,m_end): #右侧 去头去尾
res.append(matrix[i][n_end])
# print(res)
for i in range(n_end,n_start-1,-1): #底部 整行
res.append(matrix[m_end][i])
# print(res)
for i in range(m_end-1,m_start,-1): #左侧 去头去尾
res.append(matrix[i][n_start])
# print(res)
return outsidematrix(m_start+1,m_end-1,n_start+1,n_end-1)
return outsidematrix(m_start,m_end,n_start,n_end)