package com.niuke;
import java.util.ArrayList;
/**
* Created by admin on 2018/3/10.
* 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,
* 因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
*/
public class UglyNumber {
//中心思想:我们只用比较3个数:用于乘2的最小的数、用于乘3的最小的数,用于乘5的最小的
public int GetUglyNumber_Solution(int index) {
if(index<=0)//如果小于等于0没有意义
return 0;
ArrayList<Integer> list=new ArrayList<>();
list.add(1);//将第一个丑数1放入
int i2=0;//是二倍数的索引
int i3=0;//是三倍数的索引
int i5=0;//是五倍数的索引
while(list.size()<index) {//找到一个丑数加入到数组列表中,直到列表中长度等于要找的数
int res2=list.get(i2)*2;//乘2的最小的数
int res3=list.get(i3)*3;//乘3的最小的数
int res5=list.get(i5)*5;//乘5的最小的数
int min=Math.min(res2,Math.min(res3,res5));//取三种中最小的作为下一个丑数放入数组列表中
list.add(min);
if(min==res2) {//若是乘2的最小的数
i2++;//是二倍数的索引加1
}
if(min==res3) {//若是乘3的最小的数
i3++;//是三倍数的索引加1
}
if(min==res5) {//若是乘5的最小的数
i5++;//是五倍数的索引加1
}
}
return list.get(index-1);//获得最后一个最大的丑数
}
}
丑数
最新推荐文章于 2021-06-12 16:19:33 发布