java 找丑数_AcWing 62. 丑数(java代码)

算法思想

三路归并,声明三个指针i,j,k,3个指针分别指向的3个子数组(2 3 5)中的最小值,一次往后排

为什么错误代码不可以

错误代码是不断的求2,3,5的倍数,依次往后排,但是会出现其他质因子的情况,比如说14即是2的倍数优势7的倍数,就会出现错误了

而正确代码会自动忽略7的倍数,而只有6,8

4d742c8826dd06754641be47abb63e49.png

java正确代码

class Solution {

public int getUglyNumber(int n) {

int[] q = new int[n];

q[0] = 1;

int i = 0, j = 0, k = 0;

for(int s = 1; s < n; s ++)

{

int t = Math.min(Math.min(2 * q[i], 3 * q[j]), 5 * q[k]);

q[s] = t;

if(t == 2 * q[i]) i ++;

if(t == 3 * q[j]) j ++;

if(t == 5 * q[k]) k ++;

}

return q[n - 1];

}

}

class Solution {

public int getUglyNumber(int n) {

int[] q = new int[n + 10];

q[0] = 1;

int i = 1, j = 1, k = 1;

for(int s = 1; s < n; s ++)

{

int t = Math.min(Math.min(2 * i, 3 * j), 5 * k);

q[s] = t;

if(i * 2 == t) i ++;

if(j * 3 == t) j ++;

if(k * 5 == t) k ++;

}

return q[n - 1];

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值