题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
丑数序列:1 ,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25········
第一种解题 思路,将每个丑数算出来,放到vector中,最后返回vector中第N个丑数。
丑数的规则:就是只能被2 3 5 整除。
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<=6)
return index;
int number=0;
int ugly_num=0;
while(ugly_num<index)
{
++number;
if(chen(number))
++ugly_num;
}
}
bool chen(int n)
{
while(n%2==0)
n/=2;
while(n%3==0)
n/=2;
while(n%5==0)
n/=2;
return n==1?true:false;
}
private:
vector<int> ugly;
};
第二种思路,将每一个已经得到的丑数*2 *3 或者*5 再得到丑数,并且放在会自动排序 且不重复的set中。
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<6)
return index;
set<int> ugly;
ugly.insert(1);
set<int> ::iterator it=ugly.begin();
for(int ugly_num=1;ugly_num!=index;)
{
ugly.insert(*it * 2);
ugly.insert(*it * 3);
ugly.insert(*it * 5);
it++;
ugly_num++;
}
return *it;
}
};