题目链接:https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
第一次编辑代码:
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index == 1)
return 1;
int count = 1;
int un = 2;
while(un > 0){
if(isUgly(un)){
count++;
if(count == index){
return un;
}
}
un++;
}
return 0;
}
public boolean isUgly(int un){
if(un == 1){
return true;
}else if(un%2 == 0){
return isUgly(un/2);
}else if(un%3 == 0){
return isUgly(un/3);
}else if(un%5 == 0){
return isUgly(un/5);
}else{
return false;
}
}
}
提交结果
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
反思
如果丑数判断函数没问题的话,就是数字递增速度太慢了。
第二次编辑代码:
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index < 1){
return 0;
}
int[] rt = new int[index];
int p2=0,p3=0,p5=0;
rt[0] = 1;
for(int i=1;i<index;i++){
rt[i] = Math.min(rt[p2]*2,Math.min(rt[p3]*3,rt[p5]*5));
if(rt[i] == rt[p2]*2){
p2++;
}
if(rt[i] == rt[p3]*3){
p3++;
}
if(rt[i] == rt[p5]*5){
p5++;
}
}
return rt[index-1];
}
}