1. 程式人生 > 其它 >Leetcode - 59. 螺旋矩陣 II

Leetcode - 59. 螺旋矩陣 II

給你一個正整數n,生成一個包含1n^2^所有元素,且元素按順時針順序螺旋排列的n x n正方形矩陣matrix

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 20

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/spiral-matrix-ii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解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))