丑数

题目:

我们把只包含因子2、3和5的数称为丑数。求按从小到大的顺序的第1500个丑数。习惯上我们把1当做第一个丑数。

 

解答:

对于已经有的丑数,我们顺序存放在数组中,对于乘以2而言,必定存在一个某个丑数T2,排在它前面的每个丑数乘以2得到的结果都会小于已有的最大丑数,排在它之后的每二个丑数乘以2得到的结果都会大于已有的最大丑数。对于乘以3和5,也存在同样的T3和T5

 

 1 public class Solution {
 2 
 3     public static int getUglyNumber(int index) {
 4         if(index <= 0) {
 5             return 0;
 6         }
 7 
 8         int uglyArray = new int[index];
 9         uglyArray[0] = 1;
10         
11         int multiply2 = 0;
12         int multiply3 = 0;
13         int multiply5 = 0;
14 
15         for(int i = 1; i < index; i++) {
16             int min = Math.min(Math.min(uglyArray[multiply2]*2, uglyArray[multiply3]*3), uglyArray[multiply5]*5);
17             uglyArray[i] = min;
18 
19             while(uglyArray[multiply2]*2 <= uglyArray[i]) {
20                 multiply2++;
21             }
22 
23             while(uglyArray[multiply3]*3 <= uglyArray[i]) {
24                 multiply3++;
25             }
26 
27             while(uglyArray[multiply5]*5 <= uglyArray[i]) {
28                 multiply5++;
29             }
30         }
31 
32         return uglyArray[index-1];
33     }
34 }

 

转载于:https://www.cnblogs.com/wylwyl/p/10481470.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值