Equal Rational Numbers LeetCode solution in Python

1
class Solution:
2
import typing
3

4
def isRationalEqual(self, s: str, t: str) -> bool:
5

6
# intuition:
7
# write each numbes as fraction: num / den
8
# then compare the two fractions.
9

10
num1, den1 = self.toFraction(s)
11
num2, den2 = self.toFraction(t)
12

13
return den1 * num2 == den2 * num1
14

15
def toFraction(self, s: str) -> typing.Tuple[int, int]:
16
if "." not in s:
17
return int(s), 1
18

19
intp, frac = s.split(".")
20
# decimal dot, but no repeating part:
21
# xyz.abc = xyzabc / 1000
22
if "(" not in frac:
23
ifrac = int(frac) if len(frac) > 0 else 0
24
num = int(intp) * (10 ** len(frac)) + ifrac
25
den = 10 ** len(frac)
26
return num, den
27

28
# this is for cases like a.b(c)
29
# let n = a.b(c)
30
# then, 10^(len(b+c)) * n = abc.(c)
31
# and 10^(len(b)) * n = ab.(c)
32
# subtract the two, and solve for n:
33
# n = (abc - ab) / (10^len(b + c) - 10^len(b))
34
frac, repfrac = frac.split("(")
35
repfrac = repfrac[:-1]
36

37
iintp = int(intp)
38
ifrac = int(frac) if len(frac) > 0 else 0
39
irep = int(repfrac)
40

41
return (
42
(iintp * (10 ** (len(frac + repfrac))) + ifrac * 10 ** len(repfrac) + irep)
43
- (iintp * 10 ** len(frac) + ifrac),
44
(10 ** len(frac + repfrac) - 10 ** len(frac)),
45
)

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0