题目:按从小到大的顺序输出前n个丑数,习惯上把1当做第一个丑数;
代码如下:
public class UglyNum {
public static void main(String[] args) {
// 要输出的丑数个数
int des = 1500;
// 结果数组
int[] result = new int[des];
result = GetUglyNumber_Solution(des);
int count = 0;
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
count++;
if (count % 10 == 0) {
System.out.println();
}
}
}
public static int[] GetUglyNumber_Solution(int index) {
if (index <= 0) {
return null;
}
int[] uglyNum = new int[index];
uglyNum[0] = 1;
int nextUglyIdex = 1;
int multiply2 = 0;
int multiply3 = 0;
int multiply5 = 0;
while (nextUglyIdex < index) {
int minUgly = Math.min(uglyNum[multiply2] * 2,
Math.min(uglyNum[multiply3] * 3, uglyNum[multiply5] * 5));
uglyNum[nextUglyIdex] = minUgly;
while (uglyNum[multiply2] * 2 <= uglyNum[nextUglyIdex]) {
multiply2++;
}
while (uglyNum[multiply3] * 3 <= uglyNum[nextUglyIdex]) {
multiply3++;
}
while (uglyNum[multiply5] * 5 <= uglyNum[nextUglyIdex]) {
multiply5++;
}
nextUglyIdex++;
}
return uglyNum;
}
}
输出结果: