1、原題
給定一個(gè)正整數(shù) n,生成一個(gè)包含 1 到 n2 所有元素,且元素按順時(shí)針順序螺旋排列的正方形矩陣。
示例:
輸入: 3 輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
2、思路
理解了這個(gè)題的邏輯,方法就很簡(jiǎn)單了,主要還是確定上下左右邊界,一條邊一條邊填充。
3、代碼
class Solution {
func generateMatrix(_ n: Int) -> [[Int]] {
// 定義上下左右邊界,
var top = 0
var right = n - 1
var bottom = n - 1
var left = 0
// 返回結(jié)果
var result = [[Int]](repeating: [Int](repeating: 0, count: n), count:n)
// 初始值從1開(kāi)始
var num = 1
// 結(jié)束值
let target = n * n
while num <= target {
// 從左到右從上倒下開(kāi)始排列
for i in stride(from: left, through: right, by: 1) {
result[top][i] = num
num += 1
}
// 排完一列,內(nèi)縮
top += 1
for i in stride(from: top, through: bottom, by: 1) {
result[i][right] = num
num += 1
}
right -= 1
for i in stride(from: right, through: left, by: -1) {
result[bottom][i] = num
num += 1
}
bottom -= 1
for i in stride(from: bottom, through: top, by: -1) {
result[i][left] = num
num += 1
}
left += 1
}
return result
}
}