题目:
我们把只包含因子2、3和5的数称为丑数。求按从小到大的顺序的第1500个丑数。习惯上我们把1当做第一个丑数。
解答:
对于已经有的丑数,我们顺序存放在数组中,对于乘以2而言,必定存在一个某个丑数T2,排在它前面的每个丑数乘以2得到的结果都会小于已有的最大丑数,排在它之后的每二个丑数乘以2得到的结果都会大于已有的最大丑数。对于乘以3和5,也存在同样的T3和T5
1 public class Solution { 2 3 public static int getUglyNumber(int index) { 4 if(index <= 0) { 5 return 0; 6 } 7 8 int uglyArray = new int[index]; 9 uglyArray[0] = 1; 10 11 int multiply2 = 0; 12 int multiply3 = 0; 13 int multiply5 = 0; 14 15 for(int i = 1; i < index; i++) { 16 int min = Math.min(Math.min(uglyArray[multiply2]*2, uglyArray[multiply3]*3), uglyArray[multiply5]*5); 17 uglyArray[i] = min; 18 19 while(uglyArray[multiply2]*2 <= uglyArray[i]) { 20 multiply2++; 21 } 22 23 while(uglyArray[multiply3]*3 <= uglyArray[i]) { 24 multiply3++; 25 } 26 27 while(uglyArray[multiply5]*5 <= uglyArray[i]) { 28 multiply5++; 29 } 30 } 31 32 return uglyArray[index-1]; 33 } 34 }