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--;
}
}
相关文章推荐
- leetcode 264. Ugly Number II
- LeetCode 264 Ugly Number II
- LeetCode 264: Ugly Number II
- LeetCode[264] Ugly Number II
- Leetcode 264(Ugly Number II)
- 264. Ugly Number II LeetCode
- Leetcode 264. Ugly Number II
- <LeetCode OJ> Ugly Number / Ugly Number II【263 / 264】
- Leetcode-264. Ugly Number II
- leetcode263_264:Ugly Number & Ugly Number II
- [LeetCode]264. Ugly Number II
- LeetCode(263) Ugly Number (264)Ugly Number II
- Leetcode练习 #264 Ugly Number II
- [LeetCode]264. Ugly Number II
- Leetcode 264(Ugly Number II)
- LeetCode264:Ugly Number II
- leetcode 264: Ugly Number II
- [Leetcode 264] Ugly Number II
- leetcode 264. Ugly Number II
- leetcode 264: Ugly Number II