题目:给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n的 最简 分数 。分数可以以 任意 顺序返回。1447题
示例 输入:n = 4输出:["1/2","1/3","1/4","2/3","3/4"]解释:"2/4" 不是最简分数,因为它可以化简为 "1/2" 。
leetcode标注为中等难度题,但是并没有那么难
分析一下题目之后发现,这道题竟然是最大公约数的变形题目,只要首先判断一下分子分母额最大公约数是不是1,就可以确定这个分数是否符合题意,那么我们先写一个最大公约数的判断方法即可
func maxCommonMeasure(num1:Int, num2:Int) -> Bool{
var toup = (num1,num2)
while toup.1 != 0 {
toup = (toup.1,toup.0 % toup.1)
}
return toup.0 == 1
}
然后在暴力循环一下,时间复杂度是O(n^2)
func simplifiedFractions(_ n: Int) -> [String]{
var str: [String] = []
for i in 2...n{
for j in 1..<i{
if maxCommonMeasure(num1: i, num2: j){
str.append("\(j)/\(i)")
}
}
}
return str
}
网友评论