1.题目描述:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
2.解题思路:
由丑数的定义可以推断,所有的丑数都是由比它小的其他丑数乘以2,3,5得到的,第一个丑数为1,1乘以2,3,5可以得到第二个丑数为2,再由2推得之后的其他丑数。对于之前乘以2的所有丑数来说,必定存在一个丑数,在该丑数之前的数乘以2会小于等于最新的丑数,在它之后的丑数乘以2会大于最新的丑数,找个该丑数的位置并将其存储在num2中,同理可得num3,num5。在得到一个新的丑数之后对num2,num3,num5进行更新。
3.代码:
class Solution {
public:
int GetUglyNumber_Solution(int index) {
vector<int> uglynum = {1};
int count = 1;
int num2 = 0;
int num3 = 0;
int num5 = 0;
int ugly = 1;
if(index == 0)
return 0;
for(int i = 1; i<index; i++)
{
int temp2 = uglynum[num2] * 2;
int temp3 = uglynum[num3] * 3;
int temp5 = uglynum[num5] * 5;
ugly = min(temp2,min(temp3,temp5));
uglynum.push_back(ugly);
if(temp2 == ugly)
num2++;
if(temp3 == ugly)
num3++;
if(temp5 == ugly)
num5++;
}
return ugly;
}
};