經典數學應用題 Pow(x, n) 計算 x的n次方

閱讀時間約 4 分鐘
raw-image

這題的題目在這裡:

題目敘述

題目會給定兩個參數,一個是底數x,一個是次方n。要求我們計算出x^n。

要求實作myPow(self, x: float, n: int) -> float 函數的內部邏輯。

也就是說,不可以呼叫程式語言內建計算指數的library


測試範例

Example 1:

Input: x = 2.00000, n = 10
Output: 1024.00000

Example 2:

Input: x = 2.10000, n = 3
Output: 9.26100

Example 3:

Input: x = 2.00000, n = -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25



約束條件

Constraints:

  • -100.0 < x < 100.0
  • -231 <= n <= 231-1
  • n is an integer.
  • Either x is not zero or n > 0.
  • -104 <= xn <= 104

演算法

其實這題會用到大家在中學學過的指數律來進行的速算技巧,面對高次方時,可以先將高次方除以二,算出低次方的答案再平方回去,兩者會是等價的。

(x^m ) ^ n = x ^(mn)

(x 連乘m次) 再連乘n次 = x 連乘(mn)次


同理類推

x^n = (x^2)^(n/2)

x的n次方
= x 連乘 n 次 = (x平方) 再 連乘 n/2次
= x平方的 (n/2)次方
= (x^2)^(n/2)


定義Pow(x, n) 代表x的n次方

通則有兩種情況:

n是偶數時,Pow(x, n) = Pow(x*x, n //2 )

n是奇數時,Pow(x, n) = x * Pow(x*x, n //2 ) 注意 奇數的時候,需要補乘一個x

註:

n // 2 在python的語法裡面,相當於 n 除以 2,並且無條件捨去小數部分。
例如 7 // 2 = 3

例子:

x ^ 7 = x * (x^2) ^ 3


遞迴的終止條件:

n == 1 時,代表次方為1,x^n = x^1 = x 直接返回x 即可。

n == 0 時,代表次方為0,x^n = x^0 = 1 直接返回1 即可。


程式碼

class Solution:
 def myPow(self, x: float, n: int) -> float:
  
  if n == 0:
   # Base case:
   return 1.0
  
  elif n == 1:
   # Base case:
   return x
  
  elif n < 0:
   # General case:
   # x ^ (-n) = (1/x) ^ n
   return self.myPow( 1/x, -n)
  
  
  # Recurrence of fast power
  
  if n & 1:
   return x * self.myPow( x*x, n // 2)
  else:
   return self.myPow( x*x, n // 2)



複雜度分析

時間複雜度:

O( log n ) 最多耗費O( log n ) 可以抵達終止條件。

空間複雜度:

O( log n ) 遞迴樹樹高 = 遞迴堆疊深度最深為O( log n )

可由遞迴關係 T( n ) = T( n / 2 ) + O( 1 ) 再經由Master Theorem 或者數學歸納法得到解答。


關鍵知識點

想到高次方可以藉由指數律來降階,從n次方降到1次方,做x^n的快速計算,比傳統O( n ) 逐項相乘的算法會快上許多。

在演算法實作上,背後對應到的框架就是DFS 和 Divide and Conquer分而治之法。


Reference:

[1] Python/JS/Go/C++ O( log n) by fast power. 85%+ [w/ Comment ] - Pow(x, n) - LeetCode

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
1. 競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。 通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。 2. 但是Easy分類的題目,通常就是該領域最基礎的題目,應該要
題目會給定我們一個陣列,要求我們找出裡面出現次數最多的數字。 出現次數最多的數字也就是我們在統計上所謂的 眾數 mode
題目會給一個輸入陣列,裡面的數字分別代表每個index對應到的高度,要求我們計算山峰與低谷的數目,總共有多少個。 山峰 Hill: 比最靠近高度不相同的兩個鄰居的高度還要高。 低谷 Valley:比最靠近高度不相同的兩個鄰居的高度還要低。
題目會給一個輸入陣列,要求我們判斷所有的數字是否構成一組單調數列。 也就是全部的數字構成一條單調遞增數列(逐漸變大), 或者一條單調遞減數列(逐漸變小)?
題目會給我們一個陣列,分別代表高低各不同的隔板高度,問我們從降雨之後,最多可以儲存多少水量?
雖然表面是一道移除元素的題目,但實際上考的還是搬移。 題目要求的是把val目標值移除,等價於 把非目標值的搬到前面,並且回傳這些剩下來的元素個數(也就是 陣列裡面,非目標值的元素總數​)。 請看下方範例,會更好理解。
1. 競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。 通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。 2. 但是Easy分類的題目,通常就是該領域最基礎的題目,應該要
題目會給定我們一個陣列,要求我們找出裡面出現次數最多的數字。 出現次數最多的數字也就是我們在統計上所謂的 眾數 mode
題目會給一個輸入陣列,裡面的數字分別代表每個index對應到的高度,要求我們計算山峰與低谷的數目,總共有多少個。 山峰 Hill: 比最靠近高度不相同的兩個鄰居的高度還要高。 低谷 Valley:比最靠近高度不相同的兩個鄰居的高度還要低。
題目會給一個輸入陣列,要求我們判斷所有的數字是否構成一組單調數列。 也就是全部的數字構成一條單調遞增數列(逐漸變大), 或者一條單調遞減數列(逐漸變小)?
題目會給我們一個陣列,分別代表高低各不同的隔板高度,問我們從降雨之後,最多可以儲存多少水量?
雖然表面是一道移除元素的題目,但實際上考的還是搬移。 題目要求的是把val目標值移除,等價於 把非目標值的搬到前面,並且回傳這些剩下來的元素個數(也就是 陣列裡面,非目標值的元素總數​)。 請看下方範例,會更好理解。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這兩星期幾乎沒有寫,主要是因為有很多事情要做,投資方面有研究債券市場跟開發新的策略(因為最近短線做的實在不是很好),其他方面有FRC比賽,學校暑輔的一堆破事之類的,反正超級忙,今天在FRC空出一些時間趕快寫一下吧!
Thumbnail
我是一個數位生產力工具的狂熱者,使用數位工具已經超過 10 年了。這篇文章我要不藏私地跟你分享 30 個我使用的數位工具,能幫助你大幅提升學習、寫作、經營個人品牌的工作效率。
Thumbnail
每一個階段,我都會為自己設立目標,這個目標不用太多或太遠大, 而是自己那個階段最渴望、最重要的一個就可以。 這邊分享我的目標、和這兩年的收穫。 也分享我所看到的東洋美術學校優缺點。
Thumbnail
網路上有很多心靈雞湯文,標題是「一生一定要做的事」,有很多各式各樣的答案,像是「高空彈跳、談一場不結婚的戀愛、擁有一台特斯拉」,但小編認為「有一個自己的品牌」和「有一間自己的房子」,真的應該是我們可以努力的方向,因為透過財富、透過錢這樣工具,不論你想做什麼都不會有壓力對嗎?
Thumbnail
01.《藝術的法則:文學場域的生成與結構》 02.《眼與心:身體現象學大師梅洛龐蒂的最後書寫》 03.《蒙太奇的微笑:城市影像/空間/跨領域》 04.《帝國的眼睛:林惺嶽藝術評論及學術文集》 05.《人造地獄:參與式藝術與觀看者政治學》 【藝術史到當代評論】 ​
Thumbnail
近年藉由《告白》、《渴望》、《來了》等片,把人性拍得又驚又恐的中島哲也,其實在《令人討厭的松子的一生》裡,先是把人性的疑惑,人生的價值,用童話般的手法呈現得美輪美奐。
Thumbnail
單以故事主體而言,《吸血鬼獵人D 》毫無疑問是優秀且嚴謹的。不過故事的優秀,同時也仰賴於作畫的用心。 就如標題所言,《吸血鬼獵人D 》是一部古典而華麗的藝術之作。它的美麗之處,就在於畫面不論是地板與背景的紋理刻劃,人物毛髮、皮膚與皺紋的描繪,景物光線與陰影、色彩的調配,通通都非常細膩且精緻。
Thumbnail
只要是零售業相關的工作者,或多或少都對亞馬遜的經營模式與市場地位有強烈印象,身邊也經常可以聽見亞馬遜的顧客跟你分享他的神奇體驗。到底亞馬遜是如何做到持續走在產業趨勢的前端,成功跨足不同領域?目前已經具有的巨大影響力,會如何影響將來機會發展?在《貝佐斯經濟學》裡,為你整理跟總結了到目前為止的最新發展。
Thumbnail
這是 Tim Cook 接掌 Apple 之後,首次的調降財務預測,也導致了蘋果股價暴跌將近 10%,市值從歷史高點的一兆美元,到現在的六千多億美元,幾乎快腰斬了。過去十年,非常風光的蘋果,到底出了什麼問題?
Thumbnail
微軟交出最新的財報,而從財報數字來看,微軟完全就是個復活的巨人。到底微軟是做對什麼事,才讓微軟重新起飛呢? 本文就從微軟的財報,來看看未來這個軟體巨人的發展方向。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這兩星期幾乎沒有寫,主要是因為有很多事情要做,投資方面有研究債券市場跟開發新的策略(因為最近短線做的實在不是很好),其他方面有FRC比賽,學校暑輔的一堆破事之類的,反正超級忙,今天在FRC空出一些時間趕快寫一下吧!
Thumbnail
我是一個數位生產力工具的狂熱者,使用數位工具已經超過 10 年了。這篇文章我要不藏私地跟你分享 30 個我使用的數位工具,能幫助你大幅提升學習、寫作、經營個人品牌的工作效率。
Thumbnail
每一個階段,我都會為自己設立目標,這個目標不用太多或太遠大, 而是自己那個階段最渴望、最重要的一個就可以。 這邊分享我的目標、和這兩年的收穫。 也分享我所看到的東洋美術學校優缺點。
Thumbnail
網路上有很多心靈雞湯文,標題是「一生一定要做的事」,有很多各式各樣的答案,像是「高空彈跳、談一場不結婚的戀愛、擁有一台特斯拉」,但小編認為「有一個自己的品牌」和「有一間自己的房子」,真的應該是我們可以努力的方向,因為透過財富、透過錢這樣工具,不論你想做什麼都不會有壓力對嗎?
Thumbnail
01.《藝術的法則:文學場域的生成與結構》 02.《眼與心:身體現象學大師梅洛龐蒂的最後書寫》 03.《蒙太奇的微笑:城市影像/空間/跨領域》 04.《帝國的眼睛:林惺嶽藝術評論及學術文集》 05.《人造地獄:參與式藝術與觀看者政治學》 【藝術史到當代評論】 ​
Thumbnail
近年藉由《告白》、《渴望》、《來了》等片,把人性拍得又驚又恐的中島哲也,其實在《令人討厭的松子的一生》裡,先是把人性的疑惑,人生的價值,用童話般的手法呈現得美輪美奐。
Thumbnail
單以故事主體而言,《吸血鬼獵人D 》毫無疑問是優秀且嚴謹的。不過故事的優秀,同時也仰賴於作畫的用心。 就如標題所言,《吸血鬼獵人D 》是一部古典而華麗的藝術之作。它的美麗之處,就在於畫面不論是地板與背景的紋理刻劃,人物毛髮、皮膚與皺紋的描繪,景物光線與陰影、色彩的調配,通通都非常細膩且精緻。
Thumbnail
只要是零售業相關的工作者,或多或少都對亞馬遜的經營模式與市場地位有強烈印象,身邊也經常可以聽見亞馬遜的顧客跟你分享他的神奇體驗。到底亞馬遜是如何做到持續走在產業趨勢的前端,成功跨足不同領域?目前已經具有的巨大影響力,會如何影響將來機會發展?在《貝佐斯經濟學》裡,為你整理跟總結了到目前為止的最新發展。
Thumbnail
這是 Tim Cook 接掌 Apple 之後,首次的調降財務預測,也導致了蘋果股價暴跌將近 10%,市值從歷史高點的一兆美元,到現在的六千多億美元,幾乎快腰斬了。過去十年,非常風光的蘋果,到底出了什麼問題?
Thumbnail
微軟交出最新的財報,而從財報數字來看,微軟完全就是個復活的巨人。到底微軟是做對什麼事,才讓微軟重新起飛呢? 本文就從微軟的財報,來看看未來這個軟體巨人的發展方向。