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

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

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

第一次的代码:
向剥洋葱一样迭代,首先建立一个nxn的矩阵,然后每一次迭代填满一圈,从外往内,直到只剩下一个元素或者没有元素,停止。
kp表示圈数,注意圈的上下左右的元素的矩阵位置顺序,用一个列表储存从1到n次方的值,为了方便,每次用列表第一个元素填充,然后pop(0)。保证填充元素正确

	def lxjz(x,m,kp,n): #n用来确定圈数是否满足迭代
            if kp>=n//2:#如果迭代次数不满足还有内圈:
                if n%2==0:
                    return
                else: #因为是正方形,n为奇数时候,最里面还剩一个元素
                    x[kp][kp]=m[0]
                    return
            else:#还有内圈
                n=len(x)
                for i in range(kp,n-kp):#上侧圈
                    x[kp][i]=m[0]
                    m.pop(0)
                for j in range(1+kp,n-1-kp):#右侧圈
                    x[j][n-1-kp]=m[0]
                    m.pop(0)
                for k in range(n-1-kp,-1+kp,-1):#下侧圈
                    x[-1-kp][k]=m[0]
                    m.pop(0)
                for l in range(n-2-kp,kp,-1): #左侧圈
                    x[l][kp]=m[0]
                    m.pop(0)
                lxjz(x,m,kp+1,n)#pop之后的列表继续迭代,迭代圈数kp+1          
        pf=[] #列表储存(1到n*n)
        for i in range(1,n*n+1):
            pf.append(i)
        x=[[0 for i in range(n)] for j in range(n)] #新建列表
        lxjz(x,pf,0,n)
        return x

28ms,排名99.4%

猜你喜欢

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