1447最简分数
最简分数
(https://leetcode-cn.com/problems/simplified-fractions/description/)
给你一个整数
n
,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于n
的 最简 分数 。分数可以以 任意 顺序返回。
示例
示例 1:
输入:n = 2
输出:["1/2"]
解释:"1/2" 是唯一一个分母小于等于 2 的最简分数。
示例 2:
输入:n = 3
输出:["1/2","1/3","2/3"]
示例 3:
输入:n = 4
输出:["1/2","1/3","1/4","2/3","3/4"]
解释:"2/4" 不是最简分数,因为它可以化简为 "1/2" 。
示例 4:
输入:n = 1
输出:[]
提示
1 <= n <= 100
思路
从2到n遍历,获取每次遍历时由 i 作为分母的最简分式,分子小于i,大于0,并且与分母i的最大公约数是1
源码
function simplifiedFractions(n: number): string[] {
let res: Array<string> = [];
for (let i = 2; i <= n; i++) {
res = getNums(i, res);
}
return res;
};
/**
* 获取小于n,大于0,且与n的最大公约数为1的数值与n组成的分式
* @param n
*/
function getNums(n: number, res: Array<string>): string[] {
res.push(`1/${n}`)
let buffer: Array<number> = [];//存放最大公约数不为1的数
for (let i = 2; i < n; i++) {
if (buffer.includes(i)) continue;
if (n % i !== 0) {
res.push(`${i}/${n}`);
} else {
for (let j = 1; i * j < n; j++) {
buffer.push(i * j)
}
}
}
return res;
}
结果
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果