【题目描述】
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
【思路】
下一个丑数是由数组中某个丑数A * 2,B * 3,C * 5中的最小值得来的。
【代码】
public static void main(String[] args) {
for(int i=1;i<20;i++){
System.out.println(getUglyNumber(i));
}
}
// 给出第N个丑数
public static int getUglyNumber(int n) {
if (n <= 0) {
return 0;
}
// 存放丑数
List<Integer> list = new ArrayList<Integer>();
list.add(1);
int i2 = 0;
int i3 = 0;
int i5 = 0;
// 找到最小的丑数,保证是按从小到大的顺序排列
while (list.size() < n) {
int num2 = list.get(i2) * 2;
int num3 = list.get(i3) * 3;
int num5 = list.get(i5) * 5;
int min = Math.min(num2, Math.min(num3, num5));
list.add(min);
// 保证最小的数不重复
if (min == num2) {
i2++;
}
if (min == num3) {
i3++;
}
if (min == num5) {
i5++;
}
}
return list.get(list.size() - 1);
}

被折叠的 条评论
为什么被折叠?



