给你一个正整数n,生成一个包含1n^2^所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix

示例 1:
Leetcode - 59. 螺旋矩阵 II_商业

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

示例 2:

输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 20

解1 2021/9/8 O(n2)

def generateMatrix(n: int) -> list:
    '''
    题目限定,是nxn的
    1   ->  2   ->  3
                    ↓
    8   ->  9       4
    ↑               ↓
    7   <-  6   <-  5
    这题和54题区别不大,把矩阵先创建好,往里填就行了

    拿过来,改吧改吧
    →   ↓   ←   ↑   循环,直到填完n个数为止
    同时更新上下左右四面墙就行了
    比如,初始的时候,
    zuo=0,you=3,shang=0,xia=2
    →完了,shang+=1
    ↓完了,you-=1
    ←完了,xia-=1
    ↑完了,zuo+=1
    '''
    # 不能这样创建二维数组,id(res[0])=id(res[1]=id(res[2]),一改,三行一起改
    #res=[[0]*n]*n
    # 也不能用np,类型不一样,一个是numpy.ndarray,一个是list
    #res=np.zeros(shape=(n,n),dtype=int)
    res=[[0 for hang in range(n)] for lie in range(n)]
    zuo=0
    you=n-1
    shang=0
    xia=n-1
    i=0
    num_nr=n*n
    while i<num_nr:
        # →
        for x in range(zuo,you+1):
            res[shang][x]=i+1
            i+=1
            if i==num_nr: return res
        shang+=1
        # ↓
        for x in range(shang,xia+1):
            res[x][you]=i+1
            i+=1
            if i == num_nr: return res
        you-=1
        # ←
        for x in range(you,zuo-1,-1):
            res[xia][x]=i+1
            i+=1
            if i == num_nr: return res
        xia-=1
        # ↑
        for x in range(xia,shang-1,-1):
            res[x][zuo]=i+1
            i+=1
            if i == num_nr: return res
        zuo+=1
    return res

if __name__ == '__main__':
    print(generateMatrix(3))
    print(generateMatrix(1))
    print(generateMatrix(2))
    print(generateMatrix(10))
    print(type(generateMatrix(10)))
    print(type([[1, 2, 3], [8, 9, 4], [7, 6, 5]]))
    print([[1, 2, 3], [8, 9, 4], [7, 6, 5]]==generateMatrix(3))

Leetcode - 59. 螺旋矩阵 II_商业_02