M-166. Fraction to Recurring Decimal

# 其实思路很好懂, 就是一些细节要注意
class Solution:
    def fractionToDecimal(self, numerator: int, denominator: int) -> str:
        is_neg = True if numerator * denominator < 0 else False
        n, r = divmod(abs(numerator), abs(denominator))
        s = str(n)
        if is_neg:
            s = '-' + s
        if r:
            s += '.'
        pos = len(s)
        
        r_mapping = {r : pos}
        
        while r:
        # 注意这里是用10*abs(r)做被除数了
            n, r = divmod(10*abs(r), abs(denominator))
            s += str(n)
            if r in r_mapping:
                return s[:r_mapping[r]] + "(" + s[r_mapping[r]: ]+ ")"
            pos += 1
            r_mapping[r] = pos
            
        return s

Last updated

Was this helpful?