From 88f890190107f62805ad0feb4757639a7d88c006 Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Tue, 19 Nov 2024 07:24:48 +0100 Subject: [PATCH] feat: add swift implementation to lcp problem: No.41 --- .../README.md" | 64 +++++++++++++++++++ .../Solution.swift" | 59 +++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 "lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/Solution.swift" diff --git "a/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/README.md" "b/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/README.md" index c3e7123e60f62..e9dae89819d01 100644 --- "a/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/README.md" +++ "b/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/README.md" @@ -292,6 +292,70 @@ func abs(x int) int { } ``` +#### Swift + +```swift +class Solution { + private var m = 0 + private var n = 0 + private var chessboard: [String] = [] + + func flipChess(_ chessboard: [String]) -> Int { + self.m = chessboard.count + self.n = chessboard[0].count + self.chessboard = chessboard + var ans = 0 + + for i in 0.. Int { + var queue: [[Int]] = [[i, j]] + var g = chessboard.map { Array($0) } + g[i][j] = "X" + var count = 0 + + while !queue.isEmpty { + let p = queue.removeFirst() + let i = p[0], j = p[1] + + for a in -1...1 { + for b in -1...1 { + if a == 0 && b == 0 { continue } + + var x = i + a, y = j + b + while x >= 0 && x < m && y >= 0 && y < n && g[x][y] == "O" { + x += a + y += b + } + + if x >= 0 && x < m && y >= 0 && y < n && g[x][y] == "X" { + x -= a + y -= b + count += max(abs(x - i), abs(y - j)) + + while x != i || y != j { + g[x][y] = "X" + queue.append([x, y]) + x -= a + y -= b + } + } + } + } + } + return count + } +} +``` + diff --git "a/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/Solution.swift" "b/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/Solution.swift" new file mode 100644 index 0000000000000..cee5297eac9ce --- /dev/null +++ "b/lcp/LCP 41. \351\273\221\347\231\275\347\277\273\350\275\254\346\243\213/Solution.swift" @@ -0,0 +1,59 @@ +class Solution { + private var m = 0 + private var n = 0 + private var chessboard: [String] = [] + + func flipChess(_ chessboard: [String]) -> Int { + self.m = chessboard.count + self.n = chessboard[0].count + self.chessboard = chessboard + var ans = 0 + + for i in 0.. Int { + var queue: [[Int]] = [[i, j]] + var g = chessboard.map { Array($0) } + g[i][j] = "X" + var count = 0 + + while !queue.isEmpty { + let p = queue.removeFirst() + let i = p[0], j = p[1] + + for a in -1...1 { + for b in -1...1 { + if a == 0 && b == 0 { continue } + + var x = i + a, y = j + b + while x >= 0 && x < m && y >= 0 && y < n && g[x][y] == "O" { + x += a + y += b + } + + if x >= 0 && x < m && y >= 0 && y < n && g[x][y] == "X" { + x -= a + y -= b + count += max(abs(x - i), abs(y - j)) + + while x != i || y != j { + g[x][y] = "X" + queue.append([x, y]) + x -= a + y -= b + } + } + } + } + } + return count + } +} \ No newline at end of file