Medium
Fraction to Recurring Decimal — Python
Full explanation · Time O(logn) · Space O(1)
# Time: O(logn), where logn is the length of result strings
# Space: O(1)
class Solution(object):
def fractionToDecimal(self, numerator, denominator):
"""
:type numerator: int
:type denominator: int
:rtype: str
"""
result = ""
if (numerator > 0 and denominator < 0) or (numerator < 0 and denominator > 0):
result = "-"
dvd, dvs = abs(numerator), abs(denominator)
result += str(dvd / dvs)
dvd %= dvs
if dvd > 0:
result += "."
lookup = {}
while dvd and dvd not in lookup:
lookup[dvd] = len(result)
dvd *= 10
result += str(dvd / dvs)
dvd %= dvs
if dvd in lookup:
result = result[:lookup[dvd]] + "(" + result[lookup[dvd]:] + ")"
return result