Skip to content

Commit 452372e

Browse files
authored
feat: add swift implementation to lcp problem: No.64 (#3997)
1 parent 8974512 commit 452372e

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

lcp/LCP 64. 二叉树灯饰/README.md

+53
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,59 @@ func closeLampInTree(root *TreeNode) (ans int) {
258258
}
259259
```
260260

261+
#### Swift
262+
263+
```swift
264+
/* public class TreeNode {
265+
* public var val: Int
266+
* public var left: TreeNode?
267+
* public var right: TreeNode?
268+
* public init(_ val: Int) {
269+
* self.val = val
270+
* self.left = nil
271+
* self.right = nil
272+
* }
273+
* }
274+
*/
275+
276+
class Solution {
277+
func closeLampInTree(_ root: TreeNode?) -> Int {
278+
return dfs(root)[0]
279+
}
280+
281+
private func dfs(_ root: TreeNode?) -> [Int] {
282+
var ans = [Int](repeating: 0, count: 4)
283+
guard let root = root else {
284+
return ans
285+
}
286+
287+
let left = dfs(root.left)
288+
let right = dfs(root.right)
289+
290+
let l1 = left[0], l2 = left[1], l3 = left[2], l4 = left[3]
291+
let r1 = right[0], r2 = right[1], r3 = right[2], r4 = right[3]
292+
293+
if root.val != 0 {
294+
ans[0] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
295+
ans[1] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
296+
ans[2] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
297+
ans[3] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
298+
} else {
299+
ans[0] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
300+
ans[1] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
301+
ans[2] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
302+
ans[3] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
303+
}
304+
305+
return ans
306+
}
307+
308+
private func min(_ nums: Int...) -> Int {
309+
return nums.min() ?? Int.max
310+
}
311+
}
312+
```
313+
261314
<!-- tabs:end -->
262315

263316
<!-- solution:end -->
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/* public class TreeNode {
2+
* public var val: Int
3+
* public var left: TreeNode?
4+
* public var right: TreeNode?
5+
* public init(_ val: Int) {
6+
* self.val = val
7+
* self.left = nil
8+
* self.right = nil
9+
* }
10+
* }
11+
*/
12+
13+
class Solution {
14+
func closeLampInTree(_ root: TreeNode?) -> Int {
15+
return dfs(root)[0]
16+
}
17+
18+
private func dfs(_ root: TreeNode?) -> [Int] {
19+
var ans = [Int](repeating: 0, count: 4)
20+
guard let root = root else {
21+
return ans
22+
}
23+
24+
let left = dfs(root.left)
25+
let right = dfs(root.right)
26+
27+
let l1 = left[0], l2 = left[1], l3 = left[2], l4 = left[3]
28+
let r1 = right[0], r2 = right[1], r3 = right[2], r4 = right[3]
29+
30+
if root.val != 0 {
31+
ans[0] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
32+
ans[1] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
33+
ans[2] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
34+
ans[3] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
35+
} else {
36+
ans[0] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
37+
ans[1] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
38+
ans[2] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
39+
ans[3] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
40+
}
41+
42+
return ans
43+
}
44+
45+
private func min(_ nums: Int...) -> Int {
46+
return nums.min() ?? Int.max
47+
}
48+
}

0 commit comments

Comments
 (0)