題目
難度:★★★☆☆
類型:數(shù)學(xué)
方法:迭代
力扣鏈接請移步本題傳送門
更多力扣中等題的解決方案請移步力扣中等題目錄
給定一個表示分數(shù)加減運算表達式的字符串钻心,你需要返回一個字符串形式的計算結(jié)果疹鳄。 這個結(jié)果應(yīng)該是不可約分的分數(shù)挥吵,即最簡分數(shù)昔园。 如果最終結(jié)果是一個整數(shù)扁瓢,例如 2炉菲,你需要將它轉(zhuǎn)換成分數(shù)形式堕战,其分母為 1。所以在上述例子中, 2 應(yīng)該被轉(zhuǎn)換為 2/1颁督。
示例 1:
輸入:"-1/2+1/2"
輸出: "0/1"
示例 2:
輸入:"-1/2+1/2+1/3"
輸出: "1/3"
示例 3:
輸入:"1/3-1/2"
輸出: "-1/6"
示例 4:
輸入:"5/3+1/3"
輸出: "2/1"
說明:
輸入和輸出字符串只包含 '0' 到 '9' 的數(shù)字践啄,以及 '/', '+' 和 '-'。
輸入和輸出分數(shù)格式均為 ±分子/分母沉御。如果輸入的第一個分數(shù)或者輸出的分數(shù)是正數(shù)屿讽,則 '+' 會被省略掉。
輸入只包含合法的最簡分數(shù)吠裆,每個分數(shù)的分子與分母的范圍是 [1,10]伐谈。 如果分母是1,意味著這個分數(shù)實際上是一個整數(shù)试疙。
輸入的分數(shù)個數(shù)范圍是 [1,10]诵棵。
最終結(jié)果的分子與分母保證是 32 位整數(shù)范圍內(nèi)的有效整數(shù)。
解答
這是一道小學(xué)數(shù)學(xué)題祝旷。這里引用某大佬的解答履澳,簡潔優(yōu)雅嘶窄,以饗讀者。
class Solution:
def fractionAddition(self, expression: str) -> str:
from re import findall
from functools import reduce
from math import gcd
def calculate(m, n):
divide1, divisor1 = map(int, m.split('/'))
divide2, divisor2 = map(int, n.split('/'))
lcm = divisor1 * divisor2 // gcd(divisor1, divisor2) # 最小公倍數(shù)
divide = divide1 * (lcm // divisor1) + divide2 * (lcm // divisor2)
_gcd = gcd(divide, lcm) # 用于約分的最大公因數(shù)
return "{}/{}".format(divide //_gcd, lcm // _gcd)
lst = findall('[+-]?\d+/\d+', expression)
return reduce(calculate, lst)
如有疑問或建議距贷,歡迎評論區(qū)留言~
有關(guān)更多力扣中等題的python解決方案柄冲,請移步力扣中等題解析