Leetcode 592. 分数加减运算
本文最后更新于172 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。

这个结果应该是不可约分的分数,即 最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。

1.2.题目地址

https://leetcode.cn/problems/fraction-addition-and-subtraction/description/

2.解题方法

2.1.解题思路

配对匹配,求最小公倍数和最大公因数(最小公倍数=a*b//gcd(a,b))

2.2.解题步骤

第一步,匹配(分子,分母)的对

第二步,构建函数combine,实现合并两个分数

第三步,遍历pairs构建分数

3.解题代码

python代码

def gcd(a:int, b:int) -> int:
    minVal, maxVal = min(a, b), max(a, b)
    r = maxVal % minVal
    while r != 0:
        maxVal = minVal
        minVal = r
        r = maxVal % minVal
    return minVal

class Solution:
    def fractionAddition(self, expression: str) -> str:
        # 思路:配对匹配,求最小公倍数和最大公因数(最小公倍数=a*b//gcd(a,b))
        n = len(expression)
        # 第一步,匹配(分子,分母)的对
        pairs = []
        i = 0
        while i < n:
            # 匹配被除数
            sign = 1
            if expression[i] == "-":
                sign = -1
                i += 1
            elif expression[i] == "+":
                i += 1
            num1 = 0
            while expression[i].isdigit():
                num1 = num1 * 10 + int(expression[i])
                i += 1
            # 匹配除号
            i += 1
            # 匹配除数
            num2 = 0
            while i < n and expression[i].isdigit():
                num2 = num2 * 10 + int(expression[i])
                i += 1
            pairs.append((num1 * sign, num2))
        # print(pairs)
        # 第二步,构建函数combine,实现合并两个分数
        def combine(pair1, pair2):
            gcdVal = gcd(pair1[1], pair2[1])
            lcm = pair1[1] * pair2[1] // gcdVal # 分母的最小公倍数
            numerator = pair1[0] * (lcm // pair1[1]) + pair2[0] * (lcm // pair2[1])
            if numerator == 0:
                return (0, 1)
            gcd2 = gcd(abs(numerator), lcm)
            return (numerator // gcd2, lcm // gcd2)
        # 第三步,遍历pairs构建分数
        pair = pairs[0]
        for i in range(1, len(pairs)):
            pair = combine(pair, pairs[i])
        # print("pair", pair)
        return f"{pair[0]}/{pair[1]}"

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇