LeetCode算法題-Ugly Number(Java實(shí)現(xiàn)-四種解法)

這是悅樂(lè)書(shū)的第199次更新喇颁,第208篇原創(chuàng)

01 看題和準(zhǔn)備

今天介紹的是LeetCode算法題中Easy級(jí)別的第64題(順位題號(hào)是263)。編寫(xiě)一個(gè)程序來(lái)檢查給定的數(shù)字是否是一個(gè)丑陋的數(shù)字。丑陋的數(shù)字是正數(shù),其主要因子僅包括2,3,5。例如:

輸入:6
輸出:true
說(shuō)明:6 = 2×3

輸入:8
輸出:true
說(shuō)明:8 = 2×2×2

輸入:14
輸出:false
說(shuō)明:14并不丑陋扭勉,因?yàn)樗硪粋€(gè)因子7。

注意

  • 1通常被視為丑陋的數(shù)字苛聘。

  • 輸入在32位有符號(hào)整數(shù)范圍內(nèi):[ -2^31涂炎, 2^31 - 1]。

本次解題使用的開(kāi)發(fā)工具是eclipse设哗,jdk使用的版本是1.8唱捣,環(huán)境是win7 64位系統(tǒng),使用Java語(yǔ)言編寫(xiě)和測(cè)試网梢。

02 第一種解法

特殊情況:1是丑陋數(shù)字震缭,小于等于0的不是丑陋數(shù)字。

正常情況:num如果是丑陋數(shù)字澎粟,可以分為兩種情況:一是單純的某一因子的冪次方,二是三個(gè)因子的隨機(jī)排列組合欢瞪,可能兩個(gè)一起出現(xiàn)活烙,也有可能三個(gè)一起出現(xiàn)。除以這三個(gè)因子中的一個(gè)遣鼓,最后商是1啸盏,則說(shuō)明這個(gè)數(shù)是丑陋數(shù)字;除以這三個(gè)因子中的兩個(gè)或三個(gè)骑祟,最后商是1回懦,那么這個(gè)數(shù)也是丑陋數(shù)字气笙。

對(duì)此,使用兩層循環(huán)怯晕,外層循環(huán)控制因子潜圃,從2開(kāi)始,一直到5舟茶,中間有個(gè)4其實(shí)就是2的平方谭期,也可以算作其中的一個(gè)因子,內(nèi)層循環(huán)先判斷對(duì)當(dāng)前因子取余是否等于0吧凉,如果不等于0則說(shuō)明可能是另外的因子的積隧出,也有可能不是丑陋數(shù)字,如果等于0阀捅,則除以當(dāng)前因子獲取商胀瞪,重新賦值給num,繼續(xù)判斷和循環(huán)饲鄙。

public boolean isUgly(int num) {
    if (num > 0) {
        for (int i = 2; i < 6; i++) {
            while (num % i == 0) {
                num /= i;
            }
        }
    }
    return num == 1;
}


03 第二種解法

將2,3,5這三個(gè)因子放入數(shù)組凄诞,使用兩層循環(huán),外層依次取出數(shù)組中的因子傍妒,內(nèi)層做取余判斷和求商幔摸,前提條件是num大于0。

public boolean isUgly2(int num) {
    if (num > 0) {
        int[] arr = {2, 3, 5};
        for (int d : arr) {
            while (num % d == 0) {
                num /= d;
            }
        }
    }
    return num == 1;
}


04 第三種解法

也可以分開(kāi)來(lái)計(jì)算商颤练,使用3個(gè)循環(huán)分開(kāi)判斷取余和求商既忆,最后判斷num等不等于1。

public boolean isUgly3(int num) {
    if (num > 0) {
        while (num % 2 == 0) {
            num /= 2;
        }
        while (num % 3 == 0) {
            num /= 3;
        }
        while (num % 5 == 0) {
            num /= 5;
        }
    }
    return num == 1;
}


05 第四種解法

使用遞歸的解法嗦玖,判斷邏輯和上面兩種解法一樣患雇,對(duì)2取余等于0的話,除以2后繼續(xù)調(diào)用自身宇挫,對(duì)于3和5苛吱,情況一樣,最后判斷是否等于1器瘪。

public boolean isUgly4(int num) {
    if (num <= 0) {
        return false;
    }
    if (num % 2 == 0) {
        return isUgly4(num/=2);
    }
    if (num % 3 == 0) {
        return isUgly4(num/=3);
    }
    if (num % 5 == 0) {
        return isUgly4(num/=5);
    }
    return num == 1;
}


06 小結(jié)

算法專題目前已連續(xù)日更超過(guò)一個(gè)月翠储,算法題文章64+篇,公眾號(hào)對(duì)話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】橡疼、【算法】援所、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集欣除。

以上就是全部?jī)?nèi)容住拭,如果大家有什么好的解法思路、建議或者其他問(wèn)題,可以下方留言交流滔岳,點(diǎn)贊杠娱、留言、轉(zhuǎn)發(fā)就是對(duì)我最大的回報(bào)和支持谱煤!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末摊求,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趴俘,更是在濱河造成了極大的恐慌睹簇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥闪,死亡現(xiàn)場(chǎng)離奇詭異太惠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)疲憋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)凿渊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缚柳,你說(shuō)我怎么就攤上這事埃脏。” “怎么了秋忙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵彩掐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我灰追,道長(zhǎng)堵幽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任弹澎,我火速辦了婚禮朴下,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苦蒿。我一直安慰自己殴胧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布佩迟。 她就那樣靜靜地躺著团滥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪报强。 梳的紋絲不亂的頭發(fā)上灸姊,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音躺涝,去河邊找鬼厨钻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛坚嗜,可吹牛的內(nèi)容都是我干的夯膀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼苍蔬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诱建!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起碟绑,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俺猿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后格仲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體押袍,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年凯肋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谊惭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侮东,死狀恐怖圈盔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悄雅,我是刑警寧澤驱敲,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宽闲,受9級(jí)特大地震影響众眨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜便锨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一围辙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧放案,春花似錦姚建、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至友雳,卻和暖如春稿湿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背押赊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工饺藤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓涕俗,卻偏偏與公主長(zhǎng)得像罗丰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子再姑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容