【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
    }
}
相关推荐
茶底世界之下3 天前
为什么预览、录制、离线导出不能共享同一个背压策略?
ios·swift
2501_915909063 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
东坡肘子3 天前
一场关于 SwiftUI 动画的“原生”之争 -- 肘子的 Swift 周报 #154
人工智能·swiftui·swift
2501_915918414 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
9765033354 天前
iOS 上架 4.3a 被拒【uniapp专讲】
flutter·ios·objective-c·uniapp·swift
传奇开心果编程5 天前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
丿Wayne5 天前
iOS Token 刷新实战(Actor 避免并发重复刷新)
ios·swift·token·actor·swift并发
大熊猫侯佩6 天前
独立 App 首发完成 iPhone Duo 展开态适配
ios·swiftui·swift
SoaringHeart7 天前
Swift 进阶&封装:仿 Get 给SwiftUI 添加路由导航能力
swiftui·swift
2501_915918417 天前
使用 VS Code 写 Swift 做 iOS 开发,插件能实现哪些功能,还有哪些短板
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程