Skip to main content

49 丑数

牛客

描述

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第 n个丑数。

使用一个数组记录出现过的丑数。第一个丑数是 1 ,用三个整数记录下一个乘以 2,3,5 的坐标,开始时它们都为 0 。尝试用这 3 个下标的数乘以 2,3,5,最小者为下一个丑数,然后更新这 3 个坐标。

public class Solution {
public int GetUglyNumber_Solution(int index) {

if(index<=0) return 0;
int[] arr = new int[index];
arr[0]=1;
int i2=0, i3=0, i5=0;
for(int i=1;i<index;++i){
int pre = arr[i-1];
arr[i] = min(arr[i2]*2, arr[i3]*3, arr[i5]*5);
int cur = arr[i];
while(2*arr[i2]<=cur) i2++;
while(3*arr[i3]<=cur) i3++;
while(5*arr[i5]<=cur) i5++;
}
return arr[index-1];
}

private int min(int i1, int i2, int i3){
if(i1<i2){
if(i1<i3) return i1;
return i3;
} else {
if(i2<i3) return i2;
return i3;
}
}
}