题目
编写一个程序,找出第 n 个丑数。
丑数就是只包含质因数 2, 3, 5 的正整数。 //只包含质因素2,3,5
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 ,15,是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690
代码实现
public class demo {
public static int find(int target) {
int index = 1;
Map<Integer,Integer> map = new HashMap<>();
List<Integer> list1 = new LinkedList<>();
List<Integer> list2 = new LinkedList<>();
list2.add(2);
list2.add(3);
list2.add(5);
for(int i=1;i<1690;i++) {
for(int j=2;j<i;j++) {
if(i%j==0) {
list1.add(j);
}
}
/*System.out.println(list1);*/
if(i>6&&list1.isEmpty()) {
continue;
}else {
list1.removeAll(list2);
boolean falg = true;
boolean f = true;
List<Integer> end = new ArrayList<>();
for(int x:list1) {
for(int first=2;first<x;first++) {
if(x%first==0) {
end.add(first);
}
}
if(end.isEmpty()){
f = false;
falg = false;
}
if(f==false) {
break;
}
end.clear();
}
if(falg==true) {
map.put(index,i);
index++;
}
list1.clear();
}
}
Set<Map.Entry<Integer,Integer>> set = map.entrySet();
for(Entry<Integer,Integer> entry:set) {
System.out.println(entry);
}
return map.get(target);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要查询的第几个丑数");
int x = scanner.nextInt();
System.out.println(find(x));
}
}