'''
解题思路:
先做4个子函数fun1-4,再做一个主调fun,运行一次剥离一圈数据,直到矩阵为空
'''
def fun1(matrix):
    if matrix:
        return matrix.pop(0),matrix   
    else: 
        return [],[]
def fun2(matrix):
    if matrix:
        t = []
        mat = []
        for row in matrix:
            if row:
                a = row.pop()
                t.append(a)
                mat.append(row)
        return t,mat
    else: 
        return [],[]
def fun3(matrix):
    if matrix:
        return matrix.pop()[::-1],matrix
    else: 
        return [],[]
def fun4(matrix):
    if matrix:
        t = []
        mat = []
        for row in matrix[::-1]:
            if row:
                a = row.pop(0)
                t.append(a)
                mat.append(row)
        return t,mat[::-1]
    else: 
        return [],[]
def fun(matrix):
    if matrix:
        out1,matrix = fun1(matrix)
        out2,matrix = fun2(matrix)
        out3,matrix = fun3(matrix)
        out4,matrix = fun4(matrix)
        return out1+out2+out3+out4,matrix
    else: 
        return [],[]

# @param matrix int整型二维数组 
# @return int整型一维数组
#
class Solution:
    def spiralOrder(self , matrix ):
        # write code here

        res = []
        while matrix:
            out,matrix = fun(matrix)
            res += out
        #print(res)
        return res

#print(Solution().spiralOrder([[1,2,3],[4,5,6],[7,8,9]]))