54. 螺旋矩阵

题目描述

思路 and Swift 题解
这道题目还是比较有趣的,我们直接按照题意对螺旋数组的遍历进行模拟即可。
具体来说,每次大循环(完整地螺旋遍历一次数组的外圈)由四次小循环组成,分别是遍历数组的上、右、下、左四个部分。每遍历完一部分,就将相应部分的边界向中间靠拢一次,直到左边界大于右边界或上边界超出下边界,我们才停止遍历。
遍历时,将二维数组的值存储到一维数组当中即可。
完整的 Swift 题解:
swift
class Solution {
func spiralOrder(_ matrix: [[Int]]) -> [Int] {
var m = matrix.count
var n = matrix[0].count
var ans = [Int]()
var l = 0, r = n - 1, u = 0, d = m - 1
while true {
for i in l...r {
ans.append(matrix[u][i])
}
u += 1
if u > d {
break
}
for i in u...d {
ans.append(matrix[i][r])
}
r -= 1
if l > r {
break
}
for i in (l...r).reversed() {
ans.append(matrix[d][i])
}
d -= 1
if u > d {
break
}
for i in (u...d).reversed() {
ans.append(matrix[i][l])
}
l += 1
if l > r {
break
}
}
return ans
}
}