264.leetcode Ugly Number II(medium)[寻找第N个丑数]
2016-09-22 19:52
267 查看
Write a program to find the
Ugly numbers are positive numbers whose prime factors only include
Note that
之前有个题目是判断是一个数是否为丑数,按照常规思路应该是从1开始顺序查找判断是否为丑数,但是这样效率不高;因此维护3个队列,分别为乘2的丑数,乘3的丑数和乘5丑数的队列,丑数一定是前面2,3,5乘以2,3,5得到的数字。因此每次从队列首部取出三个数字中最小的数字作为第k个丑数,同时乘以2,3,5放入队尾。
class Solution {
public:
int getMin(int a,int b,int c)
{
int temp = a>b?b:a;
return temp>c?c:temp;
}
int nthUglyNumber(int n) {
list<int> q2;
list<int> q3;
list<int> q5;
int count = 1;
int num = 1;
while(count != n)
{
q2.push_back(2*num);
q3.push_back(3*num);
q5.push_back(5*num);
int a = q2.front();
int b = q3.front();
int c = q5.front();
int min = getMin(a,b,c);
if(min == a) q2.pop_front();
if(min == b) q3.pop_front();
if(min == c) q5.pop_front();
++count;
num = min;
}
return num;
}
};
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, 12is the sequence of the first
10ugly numbers.
Note that
1is typically treated as an ugly number.
之前有个题目是判断是一个数是否为丑数,按照常规思路应该是从1开始顺序查找判断是否为丑数,但是这样效率不高;因此维护3个队列,分别为乘2的丑数,乘3的丑数和乘5丑数的队列,丑数一定是前面2,3,5乘以2,3,5得到的数字。因此每次从队列首部取出三个数字中最小的数字作为第k个丑数,同时乘以2,3,5放入队尾。
class Solution {
public:
int getMin(int a,int b,int c)
{
int temp = a>b?b:a;
return temp>c?c:temp;
}
int nthUglyNumber(int n) {
list<int> q2;
list<int> q3;
list<int> q5;
int count = 1;
int num = 1;
while(count != n)
{
q2.push_back(2*num);
q3.push_back(3*num);
q5.push_back(5*num);
int a = q2.front();
int b = q3.front();
int c = q5.front();
int min = getMin(a,b,c);
if(min == a) q2.pop_front();
if(min == b) q3.pop_front();
if(min == c) q5.pop_front();
++count;
num = min;
}
return num;
}
};
相关文章推荐
- Ugly Number II 寻找第N个丑数
- 【剑指Offer-时间效率平衡】寻找第N个丑数
- 面试题:寻找第N个丑数
- 剑指Offer---寻找第N个丑数
- 《剑指offer》-寻找第n个丑数
- java寻找丑数
- 从1到n的数中1出现的个数&&寻找丑数
- 【编程题目】寻找丑数
- 寻找丑数
- 寻找单链表的倒数第N个节点
- 华为机试—寻找丑数(由浅入深优化至20ms)
- 寻找第K个丑数
- 程序员面试100题之三十七,寻找丑数
- 数据结构——寻找单链表倒数第n个结点
- Ugly Number 寻找丑数 简单题
- 【转帖】寻找丑数
- 寻找丑数
- 寻找丑数问题 HDOJ 1058 Humble Numbers
- 寻找丑数
- 数据结构练习(27)寻找丑数