Leetcode做题日记:54. 螺旋矩阵(PYTHON)

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
因为规律是从矩阵的外圈到内圈,就像洋葱那样,从外往内一圈一圈的取数字,所以我选择使用递归,每次执行获得当前矩阵外圈的列表,最后设置终止条件,只有一行或者空时,返回

	def xzjz(m):
            if len(m)==0: #若已经没有内圈
                return []
            elif len(m)==1: #若内圈只有一行
                return m[0]
            else: #表明还可以递归内圈
                a=len(m) #当前矩阵行数
                b=len(m[0]) #当前矩阵列数
                c1=[] 
                c2=[]
                if b==1: #如果当前矩阵只有一列
                    a=[]
                    for i in m:
                        a.append(i[0])
                    return a #则返回这列元素的列表      
                for i in range(1,a-1): #如果有大于一列,这里取(1,a-1)
                                       #是因为外圈两侧避免重复
                        c1.append(m[i][b-1]) #设置外圈右侧列
                        c2.append(m[i][0]) #设置外圈左侧列
                next_m=[] #构建新矩阵,即去除外圈的剩余矩阵
                for j in m[1:-1]: #行少2  
                    m1=j[1:-1] #列少2
                    next_m.append(m1)
                return m[0]+c1+m[a-1][::-1]+c2[::-1]+xzjz(next_m) #递归 
                #在这里我取一圈的数字,是第一行+右侧外圈[1:-1]+最后一行+左侧
                #外圈[1:-1][::-1],左侧外圈因为是从下往上,所以取反  
        return xzjz(matrix) 

24ms,排名99.75%

猜你喜欢

转载自blog.csdn.net/weixin_44033136/article/details/86597306