#剑指offer29
#输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
#示例 1:#输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
#与leetcode59类似,但是更复杂些
#需要注意(1)此时输入的矩阵大小并不是n*n大小(2)需要判断matrix是否为空(3)需要加break的条件
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if (matrix==[]):
return matrix
else:
n1 = len(matrix[0]) #列长度
n2 = len(matrix) #行长度
l, r, t, b =0, n1 - 1, 0, n2 - 1
num, mat_sum = 1, n1 * n2
list_mat = [0]* mat_sum
#list_mat = []
while num <= mat_sum:
for i in range(l, r + 1):
list_mat[num - 1] = matrix[t][i]
#list_mat.append(matrix[t][i])
num += 1
t += 1
if t > b:
break
for i in range(t, b + 1):
list_mat[num - 1] = matrix[i][r]
#list_mat.append(matrix[i][r])
num += 1
r -= 1
if r < l:
break
for i in range(r, l - 1, -1):
list_mat[num - 1] = matrix[b][i]
#list_mat.append(matrix[b][i])
num += 1
b -= 1
if b < t:
break
for i in range(b, t - 1, -1):
list_mat[num - 1] = matrix[i][l]
#list_mat.append(matrix[i][l])
num += 1
l += 1
if l > r:
break
return list_mat