首页 > 编程知识 正文

丑数算法,队列寻找丑数

时间:2023-05-05 16:08:43 阅读:159638 作者:4365

在主题记述中,将只包含因子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;

}

(;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。