[Golang][Leetcode][Array]刷題系列-59-Spiral Matrix

Contents
59. Spiral Matrix II
Level : Medium
原題連結 : Click
題目 :
Given a positive integer n, generate an n x n matrix filled with elements from 1 to n2 in spiral order.
Example :
Note
Input: n = 3
Output: [[1,2,3],[8,9,4],[7,6,5]]
以下是我自己的解法 - O(n^2)
Runtime: 0 ms, faster than 100.00% of Go online submissions for Spiral Matrix II.
解題思路 :
- 首先題目要求螺旋式的從外面向裡面填入數字到n*n矩陣從1開始直到填滿,所以會填到n*n個數字進去
- 這個題目沒有特別的解法就是純粹需要設定好 “邊界條件” & “堅持循環不變量原則(與binary search相同)”
- 所以需要模擬順時針填入矩陣的過程
解法 :
- 首先我們可以先規劃出過程
- 從左到右
- 從上到下
- 從右到左
- 從下到上
- 然後我設定每次要走到底才算完成,像是 i = left -> right if left <= right
- <= 是重點,也就是我們所謂的"堅持循環不變量原則"要定義的原則
- 再來想像每次走完一行或一列就很像築起了一道牆,同個方向的路程會 +-1
- 所以我們要設定4個邊界條件,也根據它們的初始位置跟矩陣的對應對他們賦值
- left = 0
- right = n - 1
- top = 0
- bottom = n - 1
- 先考慮在執行 1. 的情況,從j = left走到right,然後每個循環都將 matrix[top][j] = val
- 因為已經成功築起了一道牆,所以top++
- 先考慮在執行 2. 的情況,從i = top走到bottom,然後每個循環都將 matrix[i][right] = val
- 因為已經成功築起了一道牆,所以right–
- 先考慮在執行 3. 的情況,從j = right走到left,然後每個循環都將 matrix[bottom][j] = val
- 因為已經成功築起了一道牆,所以bottom–
- 先考慮在執行 4. 的情況,從i = bottom走到top,然後每個循環都將 matrix[i][left] = val
- 因為已經成功築起了一道牆,所以left++
|
|
最後祝福努力認真的各位 “All your dream of are hidden in your daily life” 我們峰頂見!!!