Skip to content

Commit 08f080d

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

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

BFS/EvaluateDivision.swift

Lines changed: 25 additions & 17 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 {
15+
guard let first = query.first, let last = query.last else {
1616
rest.append(-1.0)
1717
continue
18-
}
18+
}
1919

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

@@ -27,38 +32,41 @@ 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+
guard let first = query.first, let last = query.last else {
48+
rest.append(-1.0)
49+
return
50+
}
51+
52+
var visited = Set([first])
53+
var qStrs = [first]
5054
var qVals = [1.0]
5155

5256
while !qStrs.isEmpty {
5357
let currentStr = qStrs.removeFirst()
5458
let currentVal = qVals.removeFirst()
5559

56-
if currentStr == query.last! {
60+
if currentStr == last {
5761
rest.append(currentVal)
5862
return
5963
}
6064

61-
for (str, val) in dict[currentStr]! {
65+
guard let candidates = dict[currentStr] else {
66+
continue
67+
}
68+
69+
for (str, val) in candidates {
6270
guard !visited.contains(str) else {
6371
continue
6472
}

0 commit comments

Comments
 (0)