这个是剑指offer中的题目,我们把只包含质因子2、3和5的数称作丑数(Ugly Number),求按从小到大的顺序的第n个丑数。
示例: 输入:n=10 输出:12 解释:1,2,3,4,5,6,8,9,10,12是前 10 个丑数。
public boolean isUgly(int n) {
if (n <= 0) {
return false;
}
int[] factors = {2, 3, 5};
for (int factor : factors) {
while (n % factor == 0) {
n /= factor;
}
}
return n == 1;
}
当n>0时,若n是丑数,则n可以写成 n = 2^a + 3^b + 5^c的形式,其中a,b,c都是非负整数。
为判断 n 是否满足上述形式,可以对 n 反复除以 2,3,5,直到 n 不再包含质因数 2,3,5。若刺下的数等于1,则说明n不包含其他质因数,是丑数;否则,说明包含其他质因数,不是丑数。