而在2x,3y,5z中,如果x=y=z那么最小丑数一定是乘以2的,但关键是有可能存在x>y>z的情况,所以我们要维持三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其被选为新的最小值后,要把相应的指针+1;因为这个指针会逐渐遍历整个数组,因此最终数组中的每一个值都会被乘以2、乘以3、乘以5,也就是实现了我们最开始的想法,只不过不是同时成乘以2、3、5,而是在需要的时候乘以2、3、5.
function GetUglyNumber_Solution(index)
{
if(index == 0){
return 0;
}
var uglyArr = [1],
two = 0,
three = 0,
five = 0;
for(var i=1;i<index;i++){
uglyArr[i] = Math.min(uglyArr[two]*2,uglyArr[three]*3,uglyArr[five]*5);
if(uglyArr[i]==uglyArr[two]*2){
two++;
}
if(uglyArr[i]==uglyArr[three]*3){
three++;
}
if(uglyArr[i]==uglyArr[five]*5){
five++;
}
}
return uglyArr[index-1];
}