链接
思路
第一个丑数是1,以后的丑数都是基于前面的丑数进行计算获得,分别乘2,3,5构成。我们每次添加进去一个当前计算出来个三个丑数的最小的一个,并且是谁计算的,谁指针就后移一位。
代码
class Solution {
//第一个丑数是1,以后的丑数都是基于前面的丑数进行计算获得
// 分别乘2,3,5构成的。我们每次添加进去一个当前计算出来个
// 三个丑数的最小的一个,并且是谁计算的,谁指针就后移一位。
public int nthUglyNumber(int n)
{
if (n < 0)
{
return -1;
}
int[] array = new int[n];
array[0] = 1; //第一个丑数是 1
int id2 = 0, id3 = 0, id5 = 0;
for (int i = 1; i < n; i++)
{
array[i] = Math.min(array[id2] * 2, Math.min(array[id3] * 3, array[id5] * 5));
if (array[id2] * 2 == array[i]) //由 id2计算,则 id2 指针后移
{
id2 += 1;
}
if (array[id3] * 3 == array[i])
{
id3 += 1;
}
if (array[id5] * 5 == array[i])
{
id5 += 1;
}
}
return array[n - 1];
}
}