02、分式化简【S】

1、递归

class Solution:
    def fraction(self, cont: List[int]) -> List[int]:
 
        if len(cont) == 0:
            return [0, 0]

        if len(cont) == 1:
            return [cont[0], 1]

        if len(cont) == 2:
            return [cont[0] * cont[1] + 1, cont[1]]

        # jy: 结果为 cont[0] + 1 / (ls_sub[0] / ls_sub[1])
        #     即最终结果为 cont[0] + ls_sub[1] / ls_sub[0]
        ls_sub = self.fraction(cont[1:])
        return [cont[0] * ls_sub[0] + ls_sub[1], ls_sub[0]]

2、循环

  • 假设式子为:

  • 前面每项都是

  • 只有最后一项是:

  • 把最后一项也转换为类似前面每项的形式(最后一项添加一个 0/1,值不变):

  • 则有:

  • 因此可以使用统一的步骤进行计算:
  • n=0m=1,从最后一项开始循环到第一项,迭代计算:
    • a + n / m等价于(a * m + n) / m
    • 对调mn的值作为下一轮计算的nm
  • 其实最后一步计算完,我们多取了一次倒数,再把nm对调一次即可。
  • 注意:这里不用考虑公约数,因为每次计算出来的值是

    的形式,化解之后一定是最简分数的形式。
class Solution:
    def fraction(self, cont: List[int]) -> List[int]:
        n,m = 0, 1
        for a in cont[::-1]:
            n, m = m, (m * a + n)
        return [m, n]

此处为语雀内容卡片,点击链接查看:融码一生 · 语雀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融码一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值