丑数
题目描述:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
问题分析:
两种思路:
1,直接算 -- 这种思路过于繁琐,应该还有其他直接算的简便算法
a,从num=2进行遍历
b,找出这个数的所有因子
c,找出所有因子中的质因子
d,判断有无除了2,3,5之外的质因子
e,若满足条件,则将该数字放在数组中,后续按照要求从数组中拿出第n个丑数
2,借助 2 3 5 倍数原理来算
倍数* 2 3 5 就是满足条件的数字,
关键在于如何从小到达找出所有的这样满足条件的数字
那就是对于不同的2 3 5 用不同的指针去乘,每一乘完就找出三个数里面最小的,然后相应的指针++
直到找出最后的数字
代码展示:
function GetUglyNumber_Solution(index)
{
// 倍数* 2 3 5 就是满足条件的数字,
// 关键在于如何从小到达找出所有的这样满足条件的数字
// 那就是对于不同的2 3 5 用不同的指针去乘,每一乘完就找出三个数里面最小的,然后相应的指针++
// 直到找出最后的数字
if(index<7)
return index;
let p2 = 0;
let p3 = 0;
let p5 = 0;
var arr = [1];
let gulyNum;
while(arr.length<index){
gulyNum = Math.min(arr[p2]*2,arr[p3]*3,arr[p5]*5);
if(gulyNum === arr[p2]*2) p2++;
if(gulyNum === arr[p3]*3) p3++;
if(gulyNum === arr[p5]*5) p5++;
arr.push(gulyNum);
}
return arr.pop();
}