丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它不包含因子7。习惯上我们把1当作第一个丑数。
第一种方法:逐个判断每个整数是不是丑数的解法,直观但不够高效。
第二种方法:创建数组保存已经找到的丑数,用空间换时间的解法。
另外一种解法:参考剑指offer。
public class Ugly{
public int getUgly(int index){
if(index <= 0) return 0;
int[] uglyNumbers = new int[index];
uglyNumbers[0] = 1;
int nextUglyIndex = 1;
int multiply2 = 1;
int multiply3 = 1;
int multiply5 = 1;
while(nextUglyIndex < index){
int min = Min(multiply2*2,multiply3*3,multiply5*5);
uglyNumbers[nextUglyIndex] = min;
while(multiply2*2 <= uglyNumbers[nextUglyIndex]){
++multiply2;
}
while(multiply3*3 <= uglyNumbers[nextUglyIndex]){
++multiply3;
}
while(multiply5*5 <= uglyNumbers[nextUglyIndex]){
++multiply5;
}
++nextUglyIndex;
}
int ugly = uglyNumbers[nextUglyIndex-1];
return ugly;
}
public int Min(int number1,int number2,int number3){
int min = (number1<number2)?number1:number2;
min = (min<number3)?min:number3;
return min;
}
public static void main(String[] args){
Ugly u = new Ugly();
int result = u.getUgly(1500);
System.out.println(result);
}
}

浙公网安备 33010602011771号