我们把只包含因子2、3和5的数称作丑数(Ugly Number),求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。
提示:丑数= (x、y、z大于等于0的整数)
输出第1500个丑数。
传统方法(1)通过创建循环,连续%2、%3、%5得出最后的余数。
(2)如果最终的余数为0,即可确定最终的丑数。
(3)确定丑数的过程中加入变量限定丑数的个数即可。
改进方法(1)选取最小丑数1,将其分别乘2/3/5得到对应的新丑数。
(2)分别用三个变量来表示最近一个丑数*2/*3/*5得到的丑数
(3)当三个变量中其中的最小值被选作丑数时,该数应该自增,方便下次作为索引值继续乘对应的数据,避免数据重复乘法运算
package cn.test.termtest.uglynumber; public class Ugly { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(GetUglyNumber1(1500)); } public static int GetUglyNumber1(int index) { if(index <7) return index; int ugly[] = new int[index]; //定义一个数组,用来存放每一个元素。 ugly[0] =1; //第一个丑数 int m2 =0; //最近一次乘2得到的丑数 int m3 =0; int m5 =0; for(int i=1; i< index;i++) { ugly[i] = Math.min(ugly[m2] * 2,Math.min(ugly[m3] * 3,ugly[m5] * 5)); if(ugly[i]==ugly[m2] * 2) m2++; if(ugly[i]==ugly[m3] * 3) m3++; if(ugly[i]==ugly[m5] * 5) m5++; } return ugly[index - 1]; } }
原文:https://www.cnblogs.com/MurasameLory-chenyulong/p/13171467.html