思路就是循环从小到大一次找出所有的丑陋数(主要因数仅为2, 3, 5);
/**
* @param {number} n
* @return {number}
*/
var cache = [1]; //第一个丑陋数是1;
var p1 = 0;
var p2 = 0;
var p3 = 0;
var nthUglyNumber = function(n) {
var m, r1, r2, r3;
var i = cache.length;
for( ; i < n; i++){
r1 = cache[p1] * 2;
r2 = cache[p2] * 3;
r3 = cache[p3] * 5;;
m = Math.min(r1, r2, r3);
if(m == r1) p1++;
if(m == r2) p2++;
if(m == r3) p3++;
cache[i] = m;
}
return cache[n - 1];
};
本文介绍了一种高效算法,用于查找第N个丑数,即仅包含2、3、5作为质因数的整数。通过维护三个指针和一个缓存数组,算法能够按顺序生成所有丑数,直至找到目标数值。

被折叠的 条评论
为什么被折叠?



