一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して4日目です。クリックしてイベントの詳細をご覧ください。
序文
私たちのコミュニティは、Gu Yi(Netflixの成長ハッカー、「The Way of the iOS Interview」の著者、ACEプロのフィットネスコーチ)のSwiftアルゴリズムの問題解決策を、誰もが学び、読むことができるテキストバージョンにまとめていきます。
これまでにLeetCodeアルゴリズムの58の問題を更新し、更新の時間と進捗状況を維持します(月曜日、水曜日、金曜日の午前9時にリリースされます)。大幅な改善があります。
小さな一歩を積み上げないと、千マイルも行けません。小さな小川を積み上げなければ、川を作ることはできません。Swiftコミュニティは、前進するためにあなたを伴います。提案やコメントがあれば、記事の最後にメッセージを残してください。私たちはあなたのニーズを満たすために最善を尽くします。
難易度:中
1.説明
正の整数が与えられた場合、要素が時計回りにらせん状に配置されたすべての要素を含む正方n
生成1
します。n2
n x n
matrix
2.例
例1
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
复制代码
例2
输入:n = 1
输出:[[1]]
复制代码
制限:
1 <= n <= 20
3.回答
class SpiralMatrixII {
func generateMatrix(_ n: Int) -> [[Int]] {
guard n > 0 else {
return [[Int]]()
}
var num = 1
var res = Array(repeating: Array(repeating: 0, count: n), count: n)
for layer in 0..<n / 2 {
let start = layer
let end = n - layer - 1
// top
for i in start..<end {
res[start][i] = num
num += 1
}
// right
for i in start..<end {
res[i][end] = num
num += 1
}
// bottom
for i in stride(from: end, to: start, by: -1) {
res[end][i] = num
num += 1
}
// left
for i in stride(from: end, to: start, by: -1) {
res[i][start] = num
num += 1
}
}
// handle the center one
if n % 2 != 0 {
res[n / 2][n / 2] = n * n
}
return res
}
}
复制代码
- 主なアイデア:時計回りに始め、数字を記入し、真ん中の数字に対処することを忘れないでください。
- 時間計算量:O(n ^ 2)
- スペースの複雑さ:O(1)
アルゴリズムソリューションのリポジトリ:LeetCode-Swift
クリックしてLeetCodeの練習に進みます
私たちに関しては
私たちはSwift愛好家によって共同で維持されており、Swift戦闘、SwiftUI、Swift財団を中心とした技術コンテンツを共有し、優れた学習資料を整理して収集します。