【刷算法】丑数

简介: 【刷算法】丑数

题目描述


把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。


分析


首先从题目可以知道,对于一个丑数p,p*2、p*3、p*5都是丑数。

那么从第一个丑数1开始,1*2、1*3、1*5都是丑数,最小的2是第二个丑数;

对于第二个丑数2来说,又多出来三个需要被比较的数字,即2*2、2*3、2*5,再加上第一轮挑剩下的1*3、1*5,但是这里显然可以看出来,1*3<2*3,1*5<2*5,所以其实只需要比较2*2、1*3、1*5即可。

......

按照这样的节奏比下去即可。


代码实现


function GetUglyNumber_Solution(index) { if(index < 7)

return index; var res = []; res[0] = 1; var t2 = 0, t3 = 0, t5 = 0;

for(var i = 1;i < index;i++){
    res[i] = Math.min(res[t2]*2, Math.min(res[t3]*3, res[t5]*5));
    if(res[i] === res[t2]*2)
        t2++;
    if(res[i] === res[t3]*3)
        t3++;
    if(res[i] === res[t5]*5)
        t5++;
}
return res[index-1];
复制代码




相关文章
|
算法 前端开发
前端算法-丑数
前端算法-丑数
|
存储 算法 C++
【每日算法Day 81】面试经典题:关于丑数,你真的理解为什么这么算吗?
【每日算法Day 81】面试经典题:关于丑数,你真的理解为什么这么算吗?
|
算法
算法题每日一练---第76天:丑数 l
丑数 就是只包含质因数 2、3 和 5 的正整数。
171 1
算法题每日一练---第76天:丑数 l
|
算法 C++
|
算法 Java C++
LeetCode(算法)- 264. 丑数 II
LeetCode(算法)- 264. 丑数 II
89 0
|
存储 算法
[leetcode/lintcode 题解] 阿里算法面试真题:丑数 II · Ugly Number II
[leetcode/lintcode 题解] 阿里算法面试真题:丑数 II · Ugly Number II
[leetcode/lintcode 题解] 阿里算法面试真题:丑数 II · Ugly Number II
|
算法 C++
经典算法详解(9)寻找丑数
题目:我们把只含有因子2、3、5的数称为丑数。例如6、8都是丑数,而14不是丑数,因为它含有因子7.通常也把1当做丑数。编程找出1500以内的全部丑数。注意:使用的算法效率应尽量高。 C++实现: 1 #include 2 3 using namespace std; 4 5 //判...
1542 0
|
算法
每日一道算法题-寻找丑数
  题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。
1127 0
|
6天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
5天前
|
资源调度 算法 数据可视化
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。

热门文章

最新文章