劍指offer 面試題34:丑數(shù)

題目:
我們把只包含因子2、3和5的數(shù)稱(chēng)作丑數(shù)(Ugly Number)。求按從小到大的順序的第1500個(gè)丑數(shù)。習(xí)慣上把1當(dāng)做第一個(gè)丑數(shù)

解法一:
判斷一個(gè)數(shù)是否是丑數(shù):

bool isUglyNumber(int number) {
    while (number % 2 == 0) {
        number /= 2;
    }
    while (number % 3 == 0) {
        number /= 3;
    }
    while (number % 5 == 0) {
        number /= 5;
    }
    return number == 1 ? true : false;
}

那么要求第n個(gè)丑數(shù),依次迭代即可。

解法二:
思考丑數(shù)是怎么形成的——都是前面已有丑數(shù)乘以2、3或5生成的。假設(shè)已有丑數(shù)已按增序排列,那么下一個(gè)丑數(shù)一定是已有丑數(shù)分別乘以2、3、5得到的數(shù)中大于當(dāng)前最大丑數(shù)中的最小的一個(gè)。優(yōu)化:在乘以2得到的丑數(shù)當(dāng)中有小于當(dāng)前最大丑數(shù)的,也有大于當(dāng)前最大丑數(shù)的,而且一定是某個(gè)點(diǎn)前面的小于,后面的大于,我們只需要那個(gè)點(diǎn)即可。對(duì)于乘以3得到的丑數(shù)、乘以5得到的丑數(shù)同理。

int min(const int a, const int b, const int c) {
    int min = a < b ? a : b;
    return min < c : min :c;
}
int getUglyNumber(int index) {
    vector<int>  uglyNumbers;
    uglyNumbers.push_back(1);
    int cnt = 1;
    int p2 = 0;
    int p3 = 0;
    int p5 = 0;
    while (cnt < index) {
        uglyNumbers.push_back(min(uglyNumbers[p2]*2, uglyNumbers[p3]*3, uglyNumbers[p5]*5));
        ++cnt;
        while (uglyNumbers[p2]*2 <= uglyNumbers[cnt-1]) ++p2;
        while (uglyNumbers[p3]*3 <= uglyNumbers[cnt-1]) ++p3;
        while (uglyNumbers[p5]*5 <= uglyNumbers[cnt-1]) ++p5;
    }
    return uglyNumbers[cnt-1];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,728評(píng)論 18 399
  • 算法題:尋找丑數(shù) 這是一道在訂閱的blog上看到的題目,覺(jué)得比較有意思,就動(dòng)手做了一下。 何為丑數(shù)? 丑數(shù)(Ugl...
    David栗子閱讀 728評(píng)論 0 0
  • 1.字符串的排列 1.1.題目 題目描述 輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)...
    chappie2017閱讀 647評(píng)論 0 3
  • 食指——當(dāng)蜘蛛網(wǎng)無(wú)情地查封了我的爐臺(tái),當(dāng)灰燼的余煙嘆息著貧困的悲哀,我依然固執(zhí)地鋪平失望的灰燼,用美麗的雪花寫(xiě)下:...
    遇了個(gè)黑天鵝閱讀 218評(píng)論 0 0
  • 你的美 總是那么讓人觸不及防 轉(zhuǎn)瞬間變了模樣 像是六月的雨一樣 不經(jīng)意間溫暖了創(chuàng)傷 夜半醒,月依云, 心緒隨星牽故...
    古城溫光閱讀 348評(píng)論 1 5

友情鏈接更多精彩內(nèi)容