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