劍指offer—面試題16:數(shù)值的整數(shù)次方

實(shí)現(xiàn)函數(shù)double Power(double base, int exponent)拘央,求base的exponent次方滔悉。不得使用庫函數(shù)向叉,同時(shí)不需要考慮大數(shù)問題又跛。

題目規(guī)定不能使用庫函數(shù)伪窖,馬上想到了循環(huán)n次逸寓。每次乘以 base得到結(jié)果。

算法一:

    func myPow(_ x: Double, _ n: Int) -> Double {

        var res = 1.0
        
        for _ in 0..<n {
            res *= x
        }
        return res
    }

以為就這么簡單啦覆山?拿到上面的代碼到力扣上面提交竹伸,很快就會(huì)報(bào)錯(cuò),因?yàn)槲覀儧]有考慮到各種邊界條件簇宽。這也是這道題目所要考察的地方勋篓。開發(fā)人員考慮邊界條件。上面代碼只考慮了 base晦毙、exponent都正常的情況生巡。base、exponent為 0 或者是負(fù)數(shù)的情況都沒有考慮到见妒。

算法一改良版:

    func myPow(_ x: Double, _ n: Int) -> Double {
        if x == 0 && n < 0  {
            fatalError("參數(shù)輸入有誤")
        }
        if n == 0 {
            return 1
        }
        
        let m = (n > 0) ? n : -n
        var res = 1.0
        for _ in 0..<m {
            res *= x
        }
        return n > 0 ? res : 1/res
    }

改良版后的算法已經(jīng)滿足了我們的算法要求孤荣,能夠得到正確的答案了,但是提交到力扣上還是會(huì)因算法的時(shí)間復(fù)雜度問題超時(shí)须揣,所以我們還需要優(yōu)化盐股。

要求一個(gè)數(shù)值的n次方時(shí),我們只需要對(duì)數(shù)值的n/2次方進(jìn)行一次平方就能夠得到耻卡。如數(shù)值的16次方疯汁,可以轉(zhuǎn)換為數(shù)值8次方的平方,依次推出:8次方的需要4次方的平方卵酪。4次方需要的是2次方的平方幌蚊。這樣大大的降低了我們循環(huán)的次數(shù)谤碳。(PS:如果所求是奇次方,可以將exponent-1溢豆,轉(zhuǎn)換為偶次方后再乘以 base)

算法二:

  func myPow(_ x: Double, _ n: Int) -> Double {
        if x == 0 && n < 0  {
            fatalError("參數(shù)輸入有誤")
        }
        
        if n == 0 {
            return 1
        }
        
        if n == 1 {
            return x
        }
        var n = n
        var x = x
        var res = 1.0
        
        if  n < 0 {
            n = -n
            x = 1/x
        }
        
        while n > 0 {
            if n & 1 == 1 {
                res *= x
            }
            print(res)
            n = n >> 1
            x *= x
        }
        return res
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜒简,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子漩仙,更是在濱河造成了極大的恐慌搓茬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队他,死亡現(xiàn)場離奇詭異卷仑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)麸折,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門锡凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垢啼,你說我怎么就攤上這事私爷。” “怎么了膊夹?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵衬浑,是天一觀的道長。 經(jīng)常有香客問我放刨,道長工秩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任进统,我火速辦了婚禮助币,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘螟碎。我一直安慰自己眉菱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布掉分。 她就那樣靜靜地躺著俭缓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酥郭。 梳的紋絲不亂的頭發(fā)上华坦,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音不从,去河邊找鬼惜姐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛椿息,可吹牛的內(nèi)容都是我干的歹袁。 我是一名探鬼主播坷衍,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼条舔!你這毒婦竟也來了惫叛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤逞刷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后妻熊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夸浅,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年扔役,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帆喇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亿胸,死狀恐怖坯钦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侈玄,我是刑警寧澤婉刀,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站序仙,受9級(jí)特大地震影響突颊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潘悼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一律秃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧治唤,春花似錦棒动、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缕陕,卻和暖如春掷漱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榄檬。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工卜范, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹿榜。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓海雪,卻偏偏與公主長得像锦爵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奥裸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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