在主题记述中,将只包含因子2、3、5的数称为丑数(Ugly Number )。 例如6、8是丑陋的数,但14因为含有因子7,所以不是。 习惯上认为1是第一个丑陋的数。 从小到大求出第n个丑数。
分析:此丑数也没有规律性,所以一般项的公式等也无法求解。 最暴力的方法是一个一个地尝试。 如果是丑数则加一个,否则跳过第n个。 但是,当然不能用这个方法。 如果丑数能序列化就好了,接下来的思想是剑指邀请上的思想。 我们可以把已经求出的丑数列入数组。 因为只有2、3、5三个因子,所以后面的丑数是前面的丑数乘以2、3、5得到的。 另外,前面的丑数是序列化的,所以每次都需要乘以2、3、5。
代码:
类解决方案{
公共:
intgetuglynumber _ solution (intindex ) {
if (索引=0) )
返回0;
int t2=0,t3=0,t5=0,i=0;
int*p=(int* ) malloc ) index*sizeof ) int );
p[0]=1;
for(I=1; iindex; I ) {
p[I]=min(2*p[T2],min )5*p[t5],5*p[t5] );
wile(2*p[T2]=p[I] ) )
t2;
wile(3*p ) T3 )=p (I ) ) ) ) ) ) ) wile(3*p ) T3 ) ) ) ) ) wile(3*p ) T3 ) ) ) 652 )
t3;
wile(5*p ) T5 )=p (I ) ) ) ) ) ) wile(5*p ) T5 ) ) ) ) ) wile(5*p ) T5 )。
t5;
}
int ugly=p[i-1];
free(p;
return ugly;
}
(;