首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >菜鸟的每日力扣系列——1447. 最简分数

菜鸟的每日力扣系列——1447. 最简分数

作者头像
才浅Coding攻略
发布2022-12-12 17:42:32
发布2022-12-12 17:42:32
28000
代码可运行
举报
文章被收录于专栏:才浅coding攻略才浅coding攻略
运行总次数:0
代码可运行

力扣1447. 最简分数

解题思路:题目要求返回0到1之间满足分母小于等于n的最简分数。由于列表是从小到大进行遍历,可以使用哈希表或者是字典的key来存放分子/分母的结果,这样在1/2之后的2/4进来,求得两者结果相同,只保留1/2,以达到去重的效果。在检查时,只需要检查商是否存在即可,如果不存在,添加结果到最终结果res列表中。边界条件就是当n=1时永远为1,找不到最简分数则返回空列表。

代码语言:javascript
代码运行次数:0
运行
复制
from typing import List


def simplifiedFractions(n: int) -> List[str]:
    dic = {}  # 用字典去重,分子除以分母的值作为唯一key
    res = []  # 存放结果
    if n == 1:  # 如果整数是1,结果为空
        return []
    for mum in range(2, n+1):  # 分母从2开始
        son = 1  # 分子从1开始
        while son < mum:
            a = son / mum
            if a not in dic and 0 < a < 1:
                res.append(str(son) + '/' + str(mum))
                dic[a] = 1
            son += 1
    return res


n = 4
print(simplifiedFractions(n))  # ['1/2', '1/3', '2/3', '1/4', '3/4']

另外可以使用python的math模块gcd函数,如果gcd(x, y) == 1,即x和y的最大公约数为1,则x/y是最简分数。

代码语言:javascript
代码运行次数:0
运行
复制
from math import gcd

def math_solution(n: int) -> List[str]:
    res = []
    for i in range(n+1):
        for j in range(1, i):
            if gcd(j, i) == 1:
                res.append(str(j) + '/' + str(i))
    return res

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 才浅coding攻略 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档