【Swift】LeetCode 54. 螺旋矩阵
54. 螺旋矩阵

题目描述

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