Skip to content

Commit d449a8a

Browse files
authoredMay 21, 2024
feat: add swift implementation to lcof problem: No.13 (doocs#2865)
1 parent a9caf56 commit d449a8a

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
 

‎lcof/面试题13. 机器人的运动范围/README.md

+37
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,43 @@ public class Solution {
202202
}
203203
```
204204

205+
#### Swift
206+
207+
```swift
208+
class Solution {
209+
private var vis: [[Bool]] = []
210+
private var m: Int = 0
211+
private var n: Int = 0
212+
private var k: Int = 0
213+
214+
func movingCount(_ m: Int, _ n: Int, _ k: Int) -> Int {
215+
self.m = m
216+
self.n = n
217+
self.k = k
218+
self.vis = Array(repeating: Array(repeating: false, count: n), count: m)
219+
return dfs(0, 0)
220+
}
221+
222+
private func dfs(_ i: Int, _ j: Int) -> Int {
223+
if i >= m || j >= n || vis[i][j] || (digitSum(i) + digitSum(j)) > k {
224+
return 0
225+
}
226+
vis[i][j] = true
227+
return 1 + dfs(i + 1, j) + dfs(i, j + 1)
228+
}
229+
230+
private func digitSum(_ num: Int) -> Int {
231+
var num = num
232+
var sum = 0
233+
while num > 0 {
234+
sum += num % 10
235+
num /= 10
236+
}
237+
return sum
238+
}
239+
}
240+
```
241+
205242
<!-- tabs:end -->
206243

207244
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
private var vis: [[Bool]] = []
3+
private var m: Int = 0
4+
private var n: Int = 0
5+
private var k: Int = 0
6+
7+
func movingCount(_ m: Int, _ n: Int, _ k: Int) -> Int {
8+
self.m = m
9+
self.n = n
10+
self.k = k
11+
self.vis = Array(repeating: Array(repeating: false, count: n), count: m)
12+
return dfs(0, 0)
13+
}
14+
15+
private func dfs(_ i: Int, _ j: Int) -> Int {
16+
if i >= m || j >= n || vis[i][j] || (digitSum(i) + digitSum(j)) > k {
17+
return 0
18+
}
19+
vis[i][j] = true
20+
return 1 + dfs(i + 1, j) + dfs(i, j + 1)
21+
}
22+
23+
private func digitSum(_ num: Int) -> Int {
24+
var num = num
25+
var sum = 0
26+
while num > 0 {
27+
sum += num % 10
28+
num /= 10
29+
}
30+
return sum
31+
}
32+
}

0 commit comments

Comments
 (0)