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=0
、m=1
,从最后一项开始循环到第一项,迭代计算:
-
a + n / m
等价于(a * m + n) / m
- 对调
m
和n
的值作为下一轮计算的n
和m
- 其实最后一步计算完,我们多取了一次倒数,再把
n
和m
对调一次即可。 - 注意:这里不用考虑公约数,因为每次计算出来的值是
的形式,化解之后一定是最简分数的形式。
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]
此处为语雀内容卡片,点击链接查看:融码一生 · 语雀