丑数的定义:如果某数只是2或3或5的倍数,则该数即为丑数。
算法重点:根据已经生成的丑数生成其他的丑数。第一个丑数为1.
记录已经生成的最大丑数,然后用该数分别乘以2,3,5之后,取这三者之间的最小数作为下一个丑数。
算法过程:
int getUglyNumber(int index){
if(index==0)return 0; int ugly=0; int[]a=new int[index]; a[0]=1; int ugly2=0; int ugly3=0; int ugly5=0; int CurMaxUglyNumberIndex=1; while(CurMaxUglyNumberIndex<index){ ugly=min(a[ugly2]*2,a[ugly3]*3,a[ugly5]*5); a[CurMaxUglyNumberIndex]=ugly; while(a[ugly2]*2<=ugly)ugly2++; while(a[ugly3]*3<=ugly)ugly3++; while(a[ugly5]*5<=ugly)ugly5++; CurMaxUglyNumberIndex++; } ugly=a[CurMaxUglyNumberIndex-1]; return ugly; } |
|