166 分數到小數

2022-05-08 22:48:17 字數 1153 閱讀 3425

這題真的挺難的,主要難在數學,雜湊表的使用倒是很淺顯,我也是看了別人的思路再自己寫的。

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...