丑数
http://blog.csdn.net/baoendemao/article/details/39899367
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的
三个指针分别记录与2、3、5相乘的丑数的位置
public static int getUgly(int k){ int[] arr = new int[k]; //记录前k个丑数 arr[0]=1; int p = 1; //arr的指针 int p2 = 0; //2与第几个丑数相乘 int p3 = 0; int p5 = 0; while(p<k){ //不断往arr中填充数据,直到填满k个 int current2 = 2*arr[p2]; int current3 = 3*arr[p3]; int current5 = 5*arr[p5]; int current = getmin(current2,current3,current5); if(current==current2){ //移动指针 p2++; } if(current==current3){ p3++; } if(current==current5){ p5++; } arr[p++] = current; //填充数据,并移动指针 } return arr[k-1]; } public static int getmin(int a,int b,int c){ int min=a; if(min>b){ min = b; } if(min>c){ min = c; } return min; }
posted on 2017-08-26 16:41 zhangxiaoyu 阅读(195) 评论(0) 收藏 举报
浙公网安备 33010602011771号