/**
* 醜數
* 我們把只包含因子2,3,5的數稱作醜數,從小到大順序求第number個醜數
* <p>
* 三指針
*
* @param number
* @return
*/
public int getUglyNumber(int number) {
if (number < 0) return 0;
int a = 1;
int b = 1;
int c = 1;
int min = 1;
for (int i = 2; i <= number; i++) {
min = Math.min(Math.min(a * 2, b * 3), c * 5);
if (min == a * 2) a++;
if (min == b * 3) b++;
if (min == c * 5) c++;
}
return min;
}
/**
* 暴力解法
*
* @param number
* @return
*/
public int getUglyNumber1(int number) {
if (number < 0) return 0;
int count = 1;
int res = 1;
while (count < number) {
res++;
if (isUgly(res)) {
count++;
}
}
return res;
}
/**
* 判斷一個數是不是醜數
*
* @param number
* @return
*/
public boolean isUgly(int number) {
while (number % 2 == 0) number /= 2;
while (number % 3 == 0) number /= 3;
while (number % 5 == 0) number /= 5;
return number == 1;
}
劍指Offer學習-面試題49:醜數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.