题目描述
**
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
**
- 丑数的特点:当可以被2、3、5 整除时 一直可以除到1为止 可以的话 就是丑数
- 根据规则:丑数都是可以由比当前小的丑数*2/3/5得到
- 所以丑数数组可以 由已经存在在数组的丑数生成
- 下标为i的丑数元素 乘以2 3 5结果选择最小的 以满足使得丑数从小到大排序
- 特点:空间换时间 暴力破解的话 需要对非丑数也进行判断 本方法不需要
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index==0)
return 0;
int[] uArr=new int[index];
uArr[0]=1;
int indexPlus2=0;
int indexPlus3=0;
int indexPlus5=0;
for(int i=1;i<index;i++){
int min=getMin(uArr[indexPlus2]*2,uArr[indexPlus3]*3,uArr[indexPlus5]*5);
uArr[i]=min;
while(uArr[i]==uArr[indexPlus2]*2)
indexPlus2++;
while(uArr[i]==uArr[indexPlus3]*3)
indexPlus3++;
while(uArr[i]==uArr[indexPlus5]*5)
indexPlus5++;
}
return uArr[index-1];
}
public static int getMin(int a,int b,int c){
int temp=Math.min(a,b);
return Math.min(temp,c);
}
}