Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number, and n does not exceed 1690.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
题意:
寻找第n个丑数。
思路:
一个丑数的2,3,5倍也肯定是丑数。设置m2,m3,m5初始值都是0,那么找出数组uglyNumbers[idx2]*2、uglyNumbers[idx3]*3、uglyNumbers[idx5]*5的最小值,最小值即为下一个丑数,同时更新最小值对应的下标,如果多个数字同时为最小值,则它们的下标都要更新,找到第n个丑数时,循环结束。、
代码:
class Solution {
public int nthUglyNumber(int n) {
int count=0,num=0;
int []ugly=new int[n];
ugly[0]=1;
int index=1;
int m2=0,m3=0,m5=0;
while(index<n)
{
ugly[index]=Math.min(ugly[m2]*2,Math.min(ugly[m3]*3,ugly[m5]*5));
if(ugly[m2]*2==ugly[index])
m2++;
if(ugly[m3]*3==ugly[index])
m3++;
if(ugly[m5]*5==ugly[index])
m5++;
index++;
}
return ugly[n-1];
}
}