我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
剑指 Offer 49. 丑数 - 力扣(LeetCode) (leetcode-cn.com)
思路:第一个丑数是1,其他的丑数只会是某个丑数的2,3,5倍。设三个指针分别指向当前要乘2,乘3,乘5的丑数,选计算出的三个丑数中的最小的那个作为下一个丑数,并把对应的指针加1
class Solution {
public int nthUglyNumber(int n) {
if(n == 0){
return 0;
}
int[] arr = new int[n];
arr[0] = 1;
int p1 = 0;
int p2 = 0;
int p3 = 0;
int a = 0;
int b = 0;
int c = 0;
for(int i = 1; i < arr.length; i++){
a = arr[p1] * 2;
b = arr[p2] * 3;
c = arr[p3] * 5;
if(a <= b && a <= c){
arr[i] = a;
p1++;
}
if(b <= a && b <= c){
arr[i] = b;
p2++;
}
if(c <= a && c <= b){
arr[i] = c;
p3++;
}
}
return arr[n - 1];
}
}