Skip to content

Commit 8668426

Browse files
committed
[BFS] Update solution to Evaluate Division
1 parent ecc7d96 commit 8668426

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

BFS/EvaluateDivision.swift

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@ class EvaluateDivision {
1212
var rest = [Double]()
1313

1414
for query in queries {
15-
guard let _ = dict[query.first!], let _ = dict[query.last!] else {
16-
rest.append(-1.0)
15+
guard let first = query.first, let last = query.last else {
16+
res.append(-1.0)
1717
continue
18-
}
18+
}
1919

20+
guard let _ = dict[first], let _ = dict[last] else {
21+
res.append(-1.0)
22+
continue
23+
}
24+
2025
bfs(query, dict, &rest)
2126
}
2227

@@ -27,38 +32,36 @@ class EvaluateDivision {
2732
var dict = [String: [(String, Double)]]()
2833

2934
for (i, equation) in equations.enumerated() {
30-
let dividend = equation.first!, divisor = equation.last!, divideRes = values[i]
35+
guard let dividend = equation.first, let divisor = equation.last else {
36+
continue
37+
}
3138

32-
insert(dividend, divisor, divideRes, to: &dict)
33-
insert(divisor, dividend, 1.0 / divideRes, to: &dict)
39+
dict[dividend] = dict[dividend, default: []] + [(divisor, values[i])]
40+
dict[divisor] = dict[divisor, default: []] + [(dividend, 1.0 / values[i])]
3441
}
3542

3643
return dict
3744
}
3845

39-
fileprivate func insert(_ dividend: String, _ divisor: String, _ divideRes: Double, to dict: inout [String: [(String, Double)]]) {
40-
if dict[dividend] == nil {
41-
dict[dividend] = [(divisor, divideRes)]
42-
} else {
43-
dict[dividend]!.append((divisor, divideRes))
44-
}
45-
}
46-
4746
fileprivate func bfs(_ query: [String], _ dict: [String: [(String, Double)]], _ rest: inout [Double]) {
48-
var visited = Set([query.first!])
49-
var qStrs = [query.first!]
47+
var visited = Set([first])
48+
var qStrs = [first]
5049
var qVals = [1.0]
5150

5251
while !qStrs.isEmpty {
5352
let currentStr = qStrs.removeFirst()
5453
let currentVal = qVals.removeFirst()
5554

56-
if currentStr == query.last! {
55+
if currentStr == last {
5756
rest.append(currentVal)
5857
return
5958
}
6059

61-
for (str, val) in dict[currentStr]! {
60+
guard let candidates = dict[currentStr] else {
61+
continue
62+
}
63+
64+
for (str, val) in candidates {
6265
guard !visited.contains(str) else {
6366
continue
6467
}

0 commit comments

Comments
 (0)