Leetcode练习(Python):哈希表类:第166题:分数到小数:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。 如果小数部分为循环小数,则将循环的部分括在括号内。

题目:
分数到小数:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。  如果小数部分为循环小数,则将循环的部分括在括号内。 
思路:
一开始想到用哈希表来存储小数点后的部分,就是没有想出一个很好的表达,一直也不对,看来一个大神的解答,写的很好啊,学习了,自己按照他的思想写了一下,此外,这道题涉及到的细节问题有很多,得注意。
程序:
class Solution:
    def fractionToDecimal(self, numerator: int, denominator: int) -> str:
        if numerator == 0:
            return '0'
        if denominator == 0:
            return 'Nan'
        if numerator * denominator < 0:
            sign = '-'
        if numerator * denominator > 0:
            sign = ''
        numerator = abs(numerator)
        denominator = abs(denominator)
        a, b = divmod(numerator, denominator)
        if b == 0:
            return sign + str(a)
        result = sign + str(a) + '.'
        myHashMap = {}
        index = len(result)
        while b != 0:
            if b not in myHashMap:
                myHashMap[b] = index
            else:
                index = myHashMap[b]
                result = result[: index] + '('+ result[index :] +')'
                return result
            a, b = divmod(b * 10, denominator)
            result += str(a)
            index += 1
        return result
posted on 2020-04-28 16:41  桌子哥  阅读(740)  评论(0编辑  收藏  举报