丑数(较难,数学,二分)
程序员文章站
2024-01-04 11:11:34
...
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
示例1
输入
7
返回值
8
可以很轻易的知道每个丑数,都是由一个丑数乘2,乘3,乘5得来的。问题在于如何正确的进行排序。
我们可以维持三个指针来记录当前乘以2、乘以3、乘以5的最小值。
当其被选为新的最小值后,要把相应的指针+1。
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<=0) return 0;
int x=0,y=0,z=0;
int ans[index];
ans[0]=1;
for(int i=1;i<index;i++)
{
ans[i]=min(ans[x]*2,min(ans[y]*3,ans[z]*5));
if(ans[i]==ans[x]*2) x++;
if(ans[i]==ans[y]*3) y++;
if(ans[i]==ans[z]*5) z++;
}
return ans[index-1];
}
};