https://leetcode.com/problems/fraction-to-recurring-decimal/description/
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.
If the fractional part is repeating, enclose the repeating part in parentheses.
Example 1:
Input: numerator = 1, denominator = 2 Output: "0.5"
Example 2:
Input: numerator = 2, denominator = 1 Output: "2"
Example 3:
Input: numerator = 2, denominator = 3 Output: "0.(6)"
class Solution(object):
def fractionToDecimal(self, numerator, denominator):
"""
:type numerator: int
:type denominator: int
:rtype: str
"""
def judge(l, remain):
for k in l:
if remain == k[1]:
return k[0]
return False
if numerator * denominator < 0:
return '-' + self.fractionToDecimal(abs(numerator), abs(denominator))
numerator, denominator = abs(numerator), abs(denominator)
if numerator % denominator == 0:
return str(numerator / denominator)
res = [str(numerator / denominator) + '.']
numerator = (numerator % denominator) * 10
dic = {}
while numerator > 0:
curr = str(numerator / denominator)
remain = numerator % denominator
if remain == 0:
res.append(curr)
break
elif curr not in dic:
res.append(curr)
dic[curr] = [[len(res) - 1, remain]]
else:
k = judge(dic[curr], remain)
if not k:
res.append(curr)
dic[curr].append([len(res) - 1, remain])
else:
res.insert(k, '(')
res.append(')')
break
numerator = remain * 10
return ''.join(res)