[路飞]_leetcode_1447.最简分数

129 阅读1分钟

题目

给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。

因为是分数,所以 分子 肯定是 0 < i < n, 分母 是 0 < i+1 <= n 才能组成分数

解题思路

n = 2  1/2
n = 3  1/2 1/3 2/3
n = 4  1/2 1/3 2/3 2/4 3/4 // 此时 1/22/4是相等的,所以在处理2/4时跳过

如果 分子 分母有公约数,则跳过,利用欧几里得算法求最大公约数

代码

var gcd = function(a, b) {
    if (b) return gcd(b, a % b)
    return a;
}
var simplifiedFractions = function(n) {
    if (n == 1) return [];
    let result = [];
    // 分子
    for (let i = 1; i < n; i++) {
        for (let j = i + 1; j <= n; j++) {
            if (gcd(i,j) !== 1) continue;
            result.push(i + '/' + j);
        }
    }
    return result;
};