package com.one;
public class UglyNumber {
/**
* 64.查找第N个丑数 具体思路可参考 [url]
* http://zhedahht.blog.163.com/blog/static/2541117420094245366965/[/url]
*
* 题目:我们把只包含因子 2、3和5的数称作丑数(Ugly
* Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。
*/
public static void main(String[] args) {
UglyNumber un = new UglyNumber();
int n = 50;
//int re = un.findNthUglyNumber2(n);
int re = un.findNthUglyNumber1(n);
System.out.println(re+" ");
}
public int findNthUglyNumber1(int n) {
int count = 0;
int i = 1;
while (count < n) {
if (isUglyNumber(i)) {
count++;
if (count == n) {
return i;
}
}
i++;
}
return -1;
}
public boolean isUglyNumber(int x) {
while (x % 2 == 0)
x /= 2;
while (x % 3 == 0)
x /= 3;
while (x % 5 == 0)
x /= 5;
return x == 1 ? true : false;
}
/*
// like finding a SuShu/PrimeNumber
public int findNthUglyNumber2(int n) {
int re = -1;
int[] a = new int[n];
a[0] = 1;
int p2 = 0, p3 = 0, p5 = 0;
int i = 1;
while (i < n) {
a[i] = min(a[p2] * 2, a[p3] * 3, a[p5] * 5);
while (a[p2] * 2 <= a[i])
p2++;
while (a[p3] * 3 <= a[i])
p3++;
while (a[p5] * 5 <= a[i])
p5++;
i++;
}
re = a[i - 1];
return re;
}
public int min(int a, int b, int c) {
return (a < b ? a : b) < c ? (a < b ? a : b) : c;
}
*/
}
转http://bylijinnan.iteye.com/category/200659
查找第N个丑数
最新推荐文章于 2021-11-06 09:36:40 发布