diff --git "a/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/README.md" "b/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/README.md" index 0c3ffee1042ac..4669f968fe929 100644 --- "a/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/README.md" +++ "b/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/README.md" @@ -202,6 +202,43 @@ public class Solution { } ``` +#### Swift + +```swift +class Solution { + private var vis: [[Bool]] = [] + private var m: Int = 0 + private var n: Int = 0 + private var k: Int = 0 + + func movingCount(_ m: Int, _ n: Int, _ k: Int) -> Int { + self.m = m + self.n = n + self.k = k + self.vis = Array(repeating: Array(repeating: false, count: n), count: m) + return dfs(0, 0) + } + + private func dfs(_ i: Int, _ j: Int) -> Int { + if i >= m || j >= n || vis[i][j] || (digitSum(i) + digitSum(j)) > k { + return 0 + } + vis[i][j] = true + return 1 + dfs(i + 1, j) + dfs(i, j + 1) + } + + private func digitSum(_ num: Int) -> Int { + var num = num + var sum = 0 + while num > 0 { + sum += num % 10 + num /= 10 + } + return sum + } +} +``` + diff --git "a/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/Solution.swift" "b/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/Solution.swift" new file mode 100644 index 0000000000000..23f250fea758f --- /dev/null +++ "b/lcof/\351\235\242\350\257\225\351\242\23013. \346\234\272\345\231\250\344\272\272\347\232\204\350\277\220\345\212\250\350\214\203\345\233\264/Solution.swift" @@ -0,0 +1,32 @@ +class Solution { + private var vis: [[Bool]] = [] + private var m: Int = 0 + private var n: Int = 0 + private var k: Int = 0 + + func movingCount(_ m: Int, _ n: Int, _ k: Int) -> Int { + self.m = m + self.n = n + self.k = k + self.vis = Array(repeating: Array(repeating: false, count: n), count: m) + return dfs(0, 0) + } + + private func dfs(_ i: Int, _ j: Int) -> Int { + if i >= m || j >= n || vis[i][j] || (digitSum(i) + digitSum(j)) > k { + return 0 + } + vis[i][j] = true + return 1 + dfs(i + 1, j) + dfs(i, j + 1) + } + + private func digitSum(_ num: Int) -> Int { + var num = num + var sum = 0 + while num > 0 { + sum += num % 10 + num /= 10 + } + return sum + } +}