Pow(x, n)

實(shí)現(xiàn) pow(x, n) 碎连,即計(jì)算 x 的 n 次冪函數(shù)绑莺。
示例 1:
輸入: 2.00000, 10
輸出: 1024.00000
示例 2:
輸入: 2.10000, 3
輸出: 9.26100
示例 3:
輸入: 2.00000, -2
輸出: 0.25000
解釋: 2^{-2} = 1/2^2 = 1/4 = 0.25
說明:
-100.0 < x < 100.0
n 是 32 位有符號(hào)整數(shù)妆偏,其數(shù)值范圍是 [?231, 231 ? 1] 我磁。

解法 1

暴力法圃阳,x 的 n 次冪就是 n 個(gè) x 相乘厌衔,注意處理 n 為負(fù)數(shù)的情況,需要將 x 變?yōu)?x 的倒數(shù)捍岳,再將 n 變?yōu)檎龜?shù)

def my_pow(x, n):
    if n < 0:
        x = 1 / x
        n = -n
    ans = 1
    for i in range(n):
        ans = ans * x
    return ans

執(zhí)行用時(shí):超出時(shí)間限制

時(shí)間復(fù)雜度:O(n)富寿,我們需要將 x 累乘 n 次。
空間復(fù)雜度:O(1)锣夹,我們只需要一個(gè)變量來保存最終 x 的累乘結(jié)果页徐。

解法 2

利用遞歸實(shí)現(xiàn)分治法,我們可以根據(jù)冪的奇偶來將公式拆解银萍,使得運(yùn)算數(shù)值盡可能小变勇,從而提升運(yùn)算速度,若為偶數(shù) x^n=(x\cdot x)^{\frac{n}{2}}贴唇,若為奇數(shù) x^n=x^{n-1}x搀绣,注意若 n 為負(fù)數(shù),x^n=\frac{1}{x^{-n}}戳气。當(dāng) n 為 1 時(shí)返回 x链患,這是遞歸的出口。另外瓶您,需要注意 x = 0 或 1麻捻,n = 0 或 1,n < 0 等情況呀袱。

def my_pow(x, n):
    if n == 0:
        return 1.0
    if n == 1:
        return x
    if n < 0:
        return 1 / my_pow(x, -n)
    if n % 2:
        return x * my_pow(x, n - 1)
    return my_pow(x * x, n / 2)

執(zhí)行用時(shí) :40 ms
內(nèi)存消耗 :13.7 MB

時(shí)間復(fù)雜度:O(log n)贸毕,每一次我們使用公式 x^n=(x\cdot x)^{\frac{n}{2}},n 都變?yōu)樵瓉淼囊话胍拐浴R虼宋覀冃枰疃?O(log n) 次操作來得到結(jié)果明棍。

空間復(fù)雜度:O(log n),每一次計(jì)算油吭,我們需要存儲(chǔ) x ^ {\frac{n }{2}} 的結(jié)果击蹲。 我們需要計(jì)算 O(log n) 次署拟,所以空間復(fù)雜度為 O(log n) 。

解法 3

利用迭代實(shí)現(xiàn)二進(jìn)制拆分歌豺,由于遞歸需要使用額外的椡魄睿空間,我們可以將遞歸轉(zhuǎn)寫為迭代类咧。我們觀察一下 n 的二進(jìn)制表示馒铃,假設(shè) n = 77,二進(jìn)制表示為 1001101痕惋,將其包含 1 的部分拆分為 1000000 0001000 0000100 0000001区宇。其中,1000000 的十進(jìn)制表示為 64值戳,0001000 的十進(jìn)制表示為 8议谷,0000100 的十進(jìn)制表示為 4,0000001 的十進(jìn)制表示為 1堕虹,而一個(gè)數(shù) x^{77} 恰好等于 x^{64}\times x^8\times x^4\times x^1卧晓。那么,如果計(jì)算一個(gè)數(shù) x 的 n 次冪赴捞,就可以從 x 開始不斷地進(jìn)行平方逼裆,得到 x^2, x^4, x^8, x^{16},\cdots 如果 n 的第 k 個(gè)(從右往左,從 0 開始計(jì)數(shù))二進(jìn)制位為 1赦政,那么我們就將 x^{2^k} 計(jì)入結(jié)果胜宇,注意是從 0 開始計(jì)數(shù),如果 n 的二進(jìn)制第 0 位為 1恢着,則將 x^{2^0} 計(jì)入結(jié)果桐愉,并全部累乘得到最終結(jié)果。

def my_pow(x, n):
    if n < 0:
        x = 1 / x
        n = -n
    ans = 1
    while n > 0:
        if n & 1:
            ans *= x
        x *= x
        n >>= 1
    return ans

執(zhí)行用時(shí) :44 ms
內(nèi)存消耗 :13.8 MB

時(shí)間復(fù)雜度:O(log n)掰派,對(duì) n 進(jìn)行二進(jìn)制拆分的時(shí)間復(fù)雜度仅财。
空間復(fù)雜度:O(1)

參考

https://leetcode-cn.com/problems/powx-n/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碗淌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抖锥,老刑警劉巖亿眠,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異磅废,居然都是意外死亡纳像,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門拯勉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竟趾,“玉大人憔购,你說我怎么就攤上這事〔砻保” “怎么了玫鸟?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)犀勒。 經(jīng)常有香客問我屎飘,道長(zhǎng),這世上最難降的妖魔是什么贾费? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任钦购,我火速辦了婚禮,結(jié)果婚禮上褂萧,老公的妹妹穿的比我還像新娘押桃。我一直安慰自己,他們只是感情好导犹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布唱凯。 她就那樣靜靜地躺著,像睡著了一般锡足。 火紅的嫁衣襯著肌膚如雪波丰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天舶得,我揣著相機(jī)與錄音掰烟,去河邊找鬼。 笑死沐批,一個(gè)胖子當(dāng)著我的面吹牛纫骑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播九孩,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼先馆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了躺彬?” 一聲冷哼從身側(cè)響起煤墙,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宪拥,沒想到半個(gè)月后仿野,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡她君,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年脚作,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡球涛,死狀恐怖劣针,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亿扁,我是刑警寧澤捺典,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站魏烫,受9級(jí)特大地震影響辣苏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哄褒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一稀蟋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呐赡,春花似錦退客、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怀泊,卻和暖如春茫藏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霹琼。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工务傲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枣申。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓售葡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親忠藤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挟伙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344