Swift - LeetCode - 3 的冪

題目

給定一個(gè)整數(shù),寫一個(gè)函數(shù)來判斷它是否是 3 的冪次方咏尝。如果是格侯,返回 true;否則押袍,返回 false

整數(shù) n3 的冪次方需滿足:存在整數(shù) x 使得 n == 3^x

示例 1:

  • 輸入: n = 27
  • 輸出: true

示例 2:

  • 輸入: n = 0
  • 輸出: false

示例 3:

  • 輸入: n = 9
  • 輸出: true

示例 4:

  • 輸入: n = 45
  • 輸出: false

提示:

  • -2^{31} <= n <= 2^{31} - 1

方法一:試除法

思路及解法

我們不斷地將 n 除以 3凯肋,直到 n=1谊惭。如果此過程中 n 無法被 3 整除,就說明 n 不是 3 的冪侮东。

本題中的 n 可以為負(fù)數(shù)或 0圈盔,可以直接提前判斷該情況并返回 \text{False},也可以進(jìn)行試除苗桂,因?yàn)樨?fù)數(shù)或 0 也無法通過多次除以 3 得到 1药磺。

代碼

class Solution {
    func isPowerOfThree(_ n: Int) -> Bool {
        if n <= 0 {
            return false
        }

        var n = n
        while n % 3 == 0 {
            n /= 3
        }

        return n == 1
    }
}

復(fù)雜度分析

  • 時(shí)間復(fù)雜度:O(\log n)。當(dāng) n3 的冪時(shí)煤伟,需要除以 3 的次數(shù)為 \log_3 n = O(\log n)癌佩;當(dāng) n 不是 3 的冪時(shí),需要除以 3 的次數(shù)小于該值便锨。

  • 空間復(fù)雜度:O(1)围辙。

方法二:判斷是否為最大 3 的冪的約數(shù)

思路及解法

我們還可以使用一種較為取巧的做法。

題目要求不能使用循環(huán)或遞歸來做放案,而傳參 n 的數(shù)據(jù)類型為 int姚建,這引導(dǎo)我們首先分析出 int 范圍內(nèi)的最大 3 次冪是多少,約為 3^{19} = 1162261467吱殉。

如果 n3 的冪的話掸冤,那么必然滿足 n * 3^k = 1162261467,即 n1162261467 存在倍數(shù)關(guān)系友雳。

因此稿湿,我們只需要判斷 n 是否為 1162261467 的約數(shù)即可。

與方法一不同的是押赊,這里需要特殊判斷 n 是負(fù)數(shù)或 0 的情況饺藤。

注意:這并不是快速判斷 x 的冪的通用做法,當(dāng)且僅當(dāng) x 為質(zhì)數(shù)可用流礁。

代碼

class Solution {
    func isPowerOfThree(_ n: Int) -> Bool {
        return n > 0 && 1162261467 % n == 0
    }
}

復(fù)雜度分析

  • 時(shí)間復(fù)雜度:O(1)涕俗。

  • 空間復(fù)雜度:O(1)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末神帅,一起剝皮案震驚了整個(gè)濱河市再姑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌找御,老刑警劉巖询刹,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谜嫉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凹联,警方通過查閱死者的電腦和手機(jī)沐兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔽挠,“玉大人住闯,你說我怎么就攤上這事“氖纾” “怎么了比原?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杠巡。 經(jīng)常有香客問我量窘,道長,這世上最難降的妖魔是什么氢拥? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任蚌铜,我火速辦了婚禮,結(jié)果婚禮上嫩海,老公的妹妹穿的比我還像新娘冬殃。我一直安慰自己,他們只是感情好叁怪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布审葬。 她就那樣靜靜地躺著,像睡著了一般奕谭。 火紅的嫁衣襯著肌膚如雪涣觉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天血柳,我揣著相機(jī)與錄音官册,去河邊找鬼。 笑死混驰,一個(gè)胖子當(dāng)著我的面吹牛攀隔,可吹牛的內(nèi)容都是我干的皂贩。 我是一名探鬼主播栖榨,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼明刷!你這毒婦竟也來了婴栽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤辈末,失蹤者是張志新(化名)和其女友劉穎愚争,沒想到半個(gè)月后映皆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轰枝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年捅彻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞍陨。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡步淹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诚撵,到底是詐尸還是另有隱情缭裆,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布寿烟,位于F島的核電站澈驼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筛武。R本人自食惡果不足惜缝其,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畅铭。 院中可真熱鬧氏淑,春花似錦、人聲如沸硕噩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炉擅。三九已至辉懒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谍失,已是汗流浹背眶俩。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留快鱼,地道東北人颠印。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像抹竹,于是被迫代替她去往敵國和親线罕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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