package com.wsy.sword;
import java.util.ArrayList;
import java.util.List;
public class GetUglyNumber_Solution
{
/*
* 丑数
* 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
* 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
*/
public int getUglyNumber_Solution(int index) {
if(index < 7)
return index;
int p2 = 0; //队列指针
int p3 = 0;
int p5 = 0;
int newNum = 1; // 当前丑数
List<Integer> list = new ArrayList<>();
list.add(newNum);
while(list.size() < index){
// 位于前面的丑数,定然是后面的丑数的因子,选出三个队列头最小的数
newNum = Math.min(list.get(p2)*2, Math.min(list.get(p3)*3, list.get(p5)*5));
if(list.get(p2)*2 == newNum)
p2++;
if(list.get(p3)*3 == newNum)
p3++;
if(list.get(p5)*5 == newNum)
p5++;
list.add(newNum);
}
return newNum;
}
public static void main(String[] args)
{
GetUglyNumber_Solution ugly = new GetUglyNumber_Solution();
System.out.println(ugly.getUglyNumber_Solution(7));
}
}
丑数
最新推荐文章于 2025-07-03 10:27:03 发布