题目
- 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路
- 超时:假如输入为100,意味着在list链表中要写入100个丑数,其实遍历的num个数可能远远大于100,所以会出现超时的情况
代码
import java.util.ArrayList;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<0)
return 0;
int num=0;
ArrayList<Integer> list = new ArrayList<>();
判断链表list中数据个数是否等于index
while(list.size()<=index){
num++;
if(isUgly(num)){
list.add(num);
}
}
//返回链表最大的那个值index
return list.get(index);
}
Boolean isUgly(int num){
while(num%2==0)
num=num/2;
while(num%3==0)
num/=3;
while(num%5==0)
num/=5;
if(num==1)
return true;
else
return false;
}
}
链接:https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b
所有的丑数分为三种类型 2*i,3*i,5*i 其中 i是数组中的元素,一开始只有1
2*1 3*1 5*1
2*2 3*1 5*1
2*2 3*2 5*1
2*3 3*2 5*1
2*3 3*2 5*2
2*4 3*3 5*2
2*5 3*3 5*2
2*5 3*4 5*2
2*6 3*4 5*3
2*8 3*5 5*3
2*8 3*6 5*4
import java.util.ArrayList;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<=0)
return 0;
ArrayList<Integer> list = new ArrayList<>();
int i1=0,i2=0,i3=0;
list.add(1);
int minnum =0;
while(list.size()<index){
int m2 = list.get(i1)*2;
int m3 = list.get(i2)*3;
int m5 = list.get(i3)*5;
minnum = Min(m2,Min(m3,m5));
list.add(minnum);
if(minnum==m2)
i1++;
if(minnum==m3)
i2++;
if(minnum==m5)
i3++;
}
return list.get(list.size()-1);
}
public int Min(int a,int b){
return a<b ? a:b;
}
}