最简分数

题目

给你一个整数 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,直接返回空数组
  • 循环,分别取得分母与分子,并求出两者的最大公约数,约分后,判断数组中是否存在,不存在则存入数组
  • 返回数组
/**
 * 最简分数
 * @param {number} n
 * @return {string[]}
 */
export default function(n: number): string[] {
  if (n < 2) return []
  // 获取最大公约数
  function getCommonDivisor(a, b) {
    while(a % b) {
      const res = a % b
      a = b
      b = res
    }
    return b
  }
  const res: string[] = []
  for (let i = 2; i <= n; i++) {
    for (let k = 1; k < i; k++) {
      const divisor = getCommonDivisor(k, i)
      if (!res.includes(`${k / divisor}/${i / divisor}`)) res.push(`${k / divisor}/${i / divisor}`)
    }
  }
  return res
}
Last Updated:
Contributors: luhaifeng