您的位置:首页 > 其它

leetCode 264. Ugly Number II

2017-03-08 09:56 405 查看

1.题目

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

意思是找出第n个丑数

2.算法

由丑数的定义可知,任何一个丑数都是2^i * 3^j * 5^m这种形式的,因此不断寻找丑数,从小到大排序,直到第n个,我们先设i = 0, j = 0, m = 0,这样就得到第一个丑数0,然后依次假设i++, j++ , m++。取最小,这样就得到第2个丑数2,依次这样比较就可以得到结果

public int nthUglyNumber(int n) {
// Write your code here
int[] num = new int
;
num[0] = 1;
int num_2 = 0;
int num_3 = 0;
int num_5 = 0;
for (int i = 1; i < n; i++)
{
num[i] = Math.min(num[num_2] * 2, Math.min(num[num_3] * 3, num[num_5] * 5));
if (num[i] == num[num_2] * 2)
{
num_2++;
}
if (num[i] == num[num_3] * 3)
{
num_3++;
}
if (num[i] == num[num_5] * 5)
{
num_5++;
}
}
return num[n - 1];
}

最小堆方法,

int nthUglyNumber(int n){
// write your code here
if (n == 1)
{
return 1;
}
int[] num = {2,3,5};
Queue<Long> q = new PriorityQueue<Long>();
q.offer(1L);
while (true)
{
long min = q.poll();
if (n == 1)
{
return (int)min;
}
for (int i = 0; i < 3; i++)
{
long cur = min * num[i];
if (!q.contains(cur))
{
q.offer(cur);
}
}
n--;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: