设计一个算法,找出只含素因子 2,3,5 的第 n 小的数。
符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12…
如果 n = 9, 返回 10
这类题目就是找规律,找到规律就好写了。
我再提供多一些数据:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24]
/**
* @param n: An integer
* @return: the nth prime number as description.
*/
const nthUglyNumber = function(n) {
// write your code here
};
// [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24]
const nthUglyNumber = function(n) {
let arr = [1];
let min,
nex2,
nex3,
nex5,
i2 = i3 = i5 = 0;
for (let i = 1; i < n; i++) {
// 除了第一个数,每个数都是2、3、5的倍数,把它们的倍数找出来,数字较小添加进去
nex2 = arr[i2] * 2;
nex3 = arr[i3] * 3;
nex5 = arr[i5] * 5;
min = Math.min(nex2, nex3, nex5);
// 增加他们的倍数 为下次计算做准备
if (min === nex2) i2++;
if (min == nex3) i3++;
if (min == nex5) i5++;
arr.push(min);
}
return arr[arr.length - 1];
// return arr
};
console.log('输出', nthUglyNumber(9), nthUglyNumber(15));
觉得还不错的话,给我的项目点个star吧
本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!