1447. 最简分数

exiaohu 于 2022-02-10 发布

题目链接:1447. 最简分数

使用辗转相除法计算两数的最大公约数,然后简化分数,并将其放入集合中,排除相同最简分数。

from typing import List


class Solution:
    @staticmethod
    def gcd(denominator, numerator):
        while numerator != 0:  # 辗转相除
            denominator, numerator = numerator, denominator % numerator
        return denominator

    def simplifiedFractions(self, n: int) -> List[str]:
        ret = set()
        for denominator in range(2, n + 1):
            for numerator in range(1, denominator):
                gcd = self.gcd(denominator, numerator)
                ret.add(f'{numerator // gcd}/{denominator // gcd}')

        return list(ret)