【Swift】LeetCode 54. 螺旋矩阵

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
    }
}
相关推荐
chaoguo123423 分钟前
Any metadata 的内存布局
swift·metadata·value witness table
tangweiguo030519871 天前
SwiftUI布局完全指南:从入门到精通
ios·swift
用户79457223954131 天前
【RxSwift】Swift 版 ReactiveX,响应式编程优雅处理异步事件流
swift·rxswift
战族狼魂2 天前
XCode 发起视频 和 收到视频通话邀请实现双语功能 中文和俄语
swift
UXbot2 天前
2026年AI全链路产品开发工具对比:5款从创意到上线一站式平台深度解析
前端·ui·kotlin·软件构建·swift·原型模式
报错小能手2 天前
ios开发方向——swift并发进阶核心 @MainActor 与 DispatchQueue.main 解析
开发语言·ios·swift
报错小能手3 天前
ios开发方向——swift并发进阶核心 async/await 详解
开发语言·ios·swift
用户79457223954134 天前
【Lottie】让设计稿上的动效直接"活"在 App 里
swiftui·swift
Mr_Tony5 天前
Swift 中的 Combine 框架完整指南(含示例代码 + 实战)
开发语言·swift
用户79457223954136 天前
【SnapKit】优雅的 Swift Auto Layout DSL 库
swiftui·swift