题目
解题思路
- 思路一:通过双层循环,计算配套的分子分母是否有公约数,如果有公约数,则不添加到结果列表。
- 思路二:同样是双层循环,分子分母按从小到大遍历,可知任何一个可约分的分数,它的实际值一定是在前面遍历过程中就出现过了。
- 按照思路二,我们就可以创建Set记录下所有的不同值,并且只需要判断后面出现的分数值是否已经出现在集合内。
Code
class Solution {
public List<String> simplifiedFractions(int n) {
// 这里其实可以指定一下初始大小,优化集合扩容的开销
Set<Float> set = new HashSet<>();
List<String> result = new ArrayList<>();
for (int i=2;i<=n;i++) {
for (int j=1;j<i;j++) {
if (!set.contains((float)j/i)) {
set.add((float)j/i);
result.add(j+"/"+i);
}
}
}
return result;
}
}
代码运行截图