题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解题思路:
1、首先,是想把每个数都除以2、除以3、除以5试试,要是都除尽了,那它就是丑数。这个方法复杂度太高,AC不了,但是可行。
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index==1)
return 1;
int max=2;
int count=1;
while(count<index){
int num = max;
while(num%2==0)
num /= 2;
while(num%3==0)
num /= 3;
while(num%5==0)
num /= 5;
if(num==1){
count++;
}
max++;
}
return max-1;
}
}
2、第二个想法,那就是丑数的由来,都是丑数=丑数*丑数来的,所以第一个丑数是1,可以判断最小的第二个丑数是1*who得来的,最小第二丑数是2,以此类推。
import java.util.*;
import java.lang.Math;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<7)
return index;
int[] res = new int[index];
res[0]=1;
int t1=0;int i2=0;int i3=0;
for(int i=1;i<index;i++){
res[i] = Math.min(res[t1]*2,Math.min(res[t2]*3,res[t3]*5));
if(res[i]==res[t1]*2) t1++; //假设丑数来自该语句,那么该位置上的索引也要+1往后走
if(res[i]==res[t2]*3) t2++;
if(res[i]==res[t3]*5) t3++;
}
return res[index-1];
}
}