592. Fraction Addition and Subtraction
# 整体逻辑是从前往后扫, 扫到符号就停下来, 用res = res(在此是res = 0/1)加exp[0:i]的数
# 接着从符号继续往后扫, 扫到第二个符号继续停下来, 继续相加.
# 相加的部分, 要先用/分割成分子和分母, 然后转成int, 再交叉相加.
# 加完之后, 要用gcd(最大公约数算法)找gcd.
# 另外可以看看这个OO的算法, 应该也很好:, 可以学习一下.
# https://leetcode.com/problems/fraction-addition-and-subtraction/discuss/313162/Python-object-oriented-solution-94-time-98-space-one-pass
class Solution:
def fractionAddition(self, expression: str) -> str:
def cal(num_a, num_b):
def gcd(a, b):
return b if a == 0 else gcd(b % a, a)
tmp_a = num_a.split('/')
tmp_b = num_b.split('/')
lst_a = (int(tmp_a[0]),int(tmp_a[1]))
lst_b = (int(tmp_b[0]),int(tmp_b[1]))
numerator = lst_a[0] * lst_b[1] + lst_a[1] * lst_b[0]
denominator = abs(lst_a[1]) * abs(lst_b[1])
g = gcd(numerator, denominator)
numerator //= g
denominator //= g
return ('-' if numerator * denominator < 0 else '') + str(abs(numerator)) + '/' + str(abs(denominator))
res = '0/1'
cur = 0
i = 0
while i < len(expression):
c = expression[i]
if c == '+' or c == '-' and i != 0:
res = cal(res, expression[cur : i])
cur = i
i += 1
return cal(res, expression[cur:])
Last updated
Was this helpful?