Leetcode - 59. 螺旋矩陣 II
阿新 • • 發佈:2021-09-08
給你一個正整數
n
,生成一個包含1
到n^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))