丑数
题目:我们把只包含因子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); } }