描述:
给你一个整数n
,请你找出并返回第n
个丑数。
丑数就是只包含质因数2
、3
或5
的正整数。
输入样例1:10
输出样例1 :12
输入样例 2:1
输出样例 2:1
import java.util.Scanner;
//给你一个整数n,请你找出并返回第n个丑数。
//丑数就是只包含质因数2、3或5的正整数。
//输入样例 1
//10
//输出样例 1
//12
//输入样例 2
//1
//输出样例 2
//1
public class 丑数 {
//因为丑数就是只包含质因数2、3或5的正整数,所以丑数对应的应该是
//2*1 2*2 2*3 2*4....等等
//3*1 3*2 3*3 3*4....等等
//5*1 5*2 5*3 5*4...等等
//取*2 *3 *5三个队列中的最小值,按升序排列即是丑数的升序队列
//比如 1 2 3 5 6 8 9 10 12
//这个丑数队列其实为 1 2*1 3*1 5*1 3*2 2*4 3*3 5*2 3*4
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//输入你要获取的为第几个丑数
int arr[]=new int[n];
//第一个丑数是1
arr[0]=1;
int n1=0;//遍历丑数*2的队列
int n2=0;//遍历丑数*3的队列
int n3=0;//遍历丑数*5的队列
for(int i=1;i<n;i++) {
//因为是升序,所以取最小值
arr[i]=Math.min(Math.min(arr[n1]*2,arr[n2]*3),arr[n3]*5);
//根据放在第i个位置上的数字更新遍历三个队列的下标
if(arr[i]==arr[n1]*2) {
n1++;
}
if(arr[i]==arr[n2]*3) {
n2++;
}if(arr[i]==arr[n3]*5) {
n3++;
}
}
System.out.println(arr[n-1]);
sc.close();}
}