1. 程式人生 > >【LeetCode每天一題】Spiral Matrix II(螺旋數組II)

【LeetCode每天一題】Spiral Matrix II(螺旋數組II)

元素 osi 結果 matrix 復雜 turn 一個 generate def

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]
思路

   之前做過一個旋轉數組的題,當時是旋轉打印矩陣,這次只是構造一個旋轉數組。方案還是一樣的,條件變量也一樣。時間復雜度為O(n*n),  空間復雜度為O(n)。
解決代碼

 1     def generateMatrix(self, n):
2 """ 3 :type n: int 4 :rtype: List[List[int]] 5 """ 6 if n == 0 or n == 1: 7 return 0 if n == 0 else [[1]]
10 nums = 1 11 up, down, left, right = 0, n-1, 0, n-1 # 上下左右變量 12 res = [] 13 for i in range(n): # 結果矩陣
14 res.append([0]*n) 15 16 while left < right: # 循環條件,也可以是 up< down。 因為是n*n矩陣,所以可以這樣。 17 for i in range(left, right): 18 res[up][i] = nums 19 nums+= 1 20 21 for i in range(up, down):
22 res[i][right] = nums 23 nums += 1 24 25 for i in range(right, left, -1): 26 res[down][i] = nums 27 nums += 1 28 29 for i in range(down, up, -1): 30 res[i][left] = nums 31 nums += 1 32 up, down, left, right = up+1, down-1, left+1, right-1 33 34 if n % 2: # 如果是奇數的話,中心還有一個元素。 35 res[left][right] = nums 36 return res

【LeetCode每天一題】Spiral Matrix II(螺旋數組II)