您的位置:首页 > 其它

Ugly Number II

2015-12-03 23:01 190 查看
TLE解法:

public class Solution {
public int nthUglyNumber(int n) {
int count = 0;
int i = 1;
while(count<n){
if(isugly(i)){

count++;
}
i++;
}
return i;
}
public boolean isugly(int n){
if(n == 1)
return true;
while(n%2==0)n /= 2;
while(n%3 == 0) n/=3;
while(n%5==0)n/=5;
if(n == 1)
return true;
else
return false;
}
}


AC解法:

可以将丑数分成三个队列

l1:1*2,2*2,3*2,4*2,5*2,6*2,8*2……

l2:1*3,2*3,3*3,4*3,5*3,6*3,8*3……

l3:1*5,2*5,3*5,4*5,5*5,6*5,8*5……

每次从三个队列中拿出队头的数比较,最小的数为当前ith的丑数,循环操作直到为i<n,就找到了nth的丑数。代码:

public class Solution {
public int nthUglyNumber(int n) {
int r = 0;
List <Integer> l1 = new LinkedList<Integer>();
List <Integer> l2 = new LinkedList<Integer>();
List <Integer> l3 = new LinkedList<Integer>();
l1.add(1);
l2.add(1);
l3.add(1);

for(int i = 0;i<n;i++){
r = l1.get(0)<l2.get(0)?(l1.get(0)<l3.get(0)?l1.get(0):l3.get(0)):(l2.get(0)<l3.get(0)?l2.get(0):l3.get(0));

if(l1.get(0)==r)l1.remove(0);
if(l2.get(0)==r)l2.remove(0);
if(l3.get(0)==r)l3.remove(0);

l1.add(r*2);
l2.add(r*3);
l3.add(r*5);
}
return r;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: