這題真的挺難的,主要難在數學,雜湊表的使用倒是很淺顯,我也是看了別人的思路再自己寫的。
a/b,a為被除數、b為除數
思路就是把所有補0的被除數都放入雜湊表,對應的鍵值是當前字串的長度。若出現相同的補過0的被除數則代表接下來除法的結果會開始迴圈,則跳出迴圈並在對應位置加括號輸出。
幾個要判斷的地方:
1.假如當前被除數小於除數,加了一位或補了乙個0之後還是小於除數,則在結果中應該加0,如1/100=0.01,1/1000=0.001,但若是首位的話,不加0,如100/11=9.0(90),第一位1<11,1加上後面一位變成10後還是小於11,但這裡不加0,因為結果字串還是空的,即要判斷一下字串是否為空。
2.加小數點的時機,是在被除數第一次補0的時候,並且如果加了小數點後字串首位就是小數點,那在前面還要補個0,如1/10這樣的情況,不補0結果就變成.1了。
3.退出迴圈後,判斷下被除數cur是否為空。若為空說明除盡了,直接輸出,否則按照題意要在迴圈開始處和末尾加括號後再輸出。
class solution:
def fractiontodecimal(self, numerator: int, denominator: int) -> str:
if denominator==0:
return 'inf'
m,n=str(abs(numerator)),abs(denominator)
i,siz=1,len(m)
res=''
dic={}
cur=int(m[:i])
dot=0
while i=1: #補0的被除數加入字典
dic[cur]=len(res)
#做除法
res+=str(cur//n) #整數部分加入結果
cur=cur%n
if cur:
l=dic[cur]
res=res[:l]+'('+res[l:]+')'
if numerator>0 and denominator<0 or numerator<0 and denominator>0 :
res='-'+res
if not res:
res='0'
return res
166 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2 輸出 0.5 思路 注釋 public string fractiontod...
Leetcode 166 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2輸出 0.5 示例 2 輸入 numerator 2,denominator ...
leetcode166 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2 輸出 0.5 示例 2 輸入 numerator 2,denominator...