LeetCode-50.求X的N次方(Pow(x, n))

2021-02-21 極客算法

50. Pow(x, n)

實現 pow(x, n) ,即計算 x 的 n 次冪函數。

示例 1:

輸入: 2.00000, 10輸出: 1024.00000

示例 2:

輸入: 2.10000, 3輸出: 9.26100

示例 3:

輸入: 2.00000, -2輸出: 0.25000解釋: 2-2 = 1/22 = 1/4 = 0.25

說明:

-100.0 < x < 100.0n 是 32 位有符號整數,其數值範圍是 [−2^31, 2^31 − 1] 。

來源:力扣(LeetCode)

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

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

暴力破解

O(N)

for循環一個個乘

class Solution:    def myPow(self, x: float, n: int) -> float:
if x == 0: return 0
if n < 0: n = -n x = 1 / x
res = 1 for i in range(n): res *= x return res

二分法

O(logN)

分治法

2^10為例:

2^10 = 2^5 * 2^5
2^5 = 2^2 * 2^2 * 2
2^2 = 2 * 2

代碼如下:

class Solution:    def myPow(self, x: float, n: int) -> float:
if x == 0: return 0
if n < 0: n = -n x = 1 / x
return self.helper(x, n)
def helper(self, x: float, n: int) -> float:
if n == 0: return 1.0
half = self.helper(x, n // 2) if n & 1 == 1: return half * half * x else: return half * half

二進位

2^10為例:

# 10的二進位是0b1010
1 0 1 0 # 10的二進位表示4th 3rd 2nd 1st # 遞歸方向⬅️, 每次去掉末尾的一位
2^8 2^4 2^2 2^1 # tmp在參與計算時的值把二進位奇數部分相加2^8 + 2^2 = 2^10

代碼如下:

class Solution:    def myPow(self, x: float, n: int) -> float:
if x == 0: return 0
if n < 0: n = -n x = 1 / x
res = 1 tmp = x
while n > 0: if n & 1 == 1: res = res * tmp
tmp = tmp * tmp n = n // 2
return res

倍增思想

2^10為例, 倍增的思想瘋狂試探

# 第一次試探2^1, 2^2, 2^4, 2^8, 2^16, 最後一個超了, 算到了2^8次方
# 第二次試探2^1, 2^2, 2^4, 最後一個超了,剛好算到2^2次方

代碼如下

class Solution:    def myPow(self, x: float, n: int) -> float:
if x == 0: return 0
exp = abs(n) res = 1
while exp > 0: mark = 1 tmp = x while (mark << 1) < exp: tmp = tmp * tmp mark = (mark << 1)
exp -= mark res *= tmp return res if (n > 0) else 1 / res

--End--

相關焦點

  • x的n次方-1的因式分解及應用
    今天小編介紹的是x的n次方-1的通用分解因式和他的證明,以及公式在等比數列前n項和and某個高等數學等價無窮小的證明中的使用。先上公式那麼這個公式有什麼用呢?1,求等比數列的前N項和雖然在初等數學教科書中用了倍差法推出了前n項和公式,但是我們也可以用上面的公式求。
  • 每天一道高頻題:pow(x,n)
    說明:-100.0<x<100.0,n是32位有符號整數,其數值範圍是[-2^31,2^31-1]最簡單的做法:將n個x進行相乘,時間複雜度
  • 469,位運算求最小的2的n次方
    給一個函數f(x),返回一個不小於x的最小的2的n次方。描述的比較繞口,舉個例子。f(7)=8f(9)=16f(30)=32f(64)=64注意:x是正整數0<x<Integer.MAX_VALUE我們看到返回的結果都是2的n次方,並且是不小於x的最小的2的n次方。
  • 歐拉猜想:n個整數的n次方之和等於另一個整數的n次方
    費馬大定理的具體的描述是:整數n >2時,關於x, y, z的方程 x^n + y^n = z^n 沒有正整數解。>如果n=4的情況下,費馬大定理是成立,那麼也就證明了n=8.n=12,n=16.......的情況下也是成立的。
  • 一起推導自然數平方、立方甚至更高次方的前n項和公式
    我們已知,自然數數列是一種等差數列 其前n項和很容易求出 假設其前n項和為Tn 觀察下列等式 將等式中的x替換成自然數1~n,可得到一系列等式
  • leetcode雞蛋掉落問題(egg drop)
    搜索後發現是leetcode上的一道經典面試題~因為過於經典,已經被踢出google面試題庫了(。)那我們就直接看看leetcode上的題目叭!扔第x次和第n(1<=n<x-1)次的時候,分別是在F層和F+1層扔的(順序可以打亂)~兩次扔雞蛋的層數相鄰,才能找到F層嘛。由此可知,測出F層的方法和雞蛋數、扔的次數、在哪一層扔的都有關。在儘可能少的雞蛋和儘可能少的次數前提下,咋確定F層捏?
  • C/C++語言中將一個正整數圓整為2的n次方的方法
    問題提出在數位訊號處理領域,常遇到需要將一個正整數向上圓整為2的n次方的數據的情況,如對採集到的時域信號做頻譜分析時,常要求數據點數必須滿足為2的n次方,滿足此種情況才可用傅立葉變換的基2快速算法,以達到較好的運算速度。
  • 單片機C語言實現求平方根算法
    在此,總結下網上常見的四種單片機常用開方根算法:對於擁有專門的乘除法指令的單片機,可採用以下兩種方法:1、二分法對於一個非負數n,它的平方根不會小於大於(n/2+1)(謝謝@linzhi-cs提醒)。在[0, n/2+1]這個範圍內可以進行二分搜索,求出n的平方根。
  • 怎麼求一個數的n次方?
    怎麼求一個數的n次方?有興趣的朋友可以了解一下!一、前言excel是我們工作中經常使用的一款表格製作工具,它不僅僅只是用來製作表格,而在表格數據的處理方面也顯得非常突出。excel為我們提供了很多函數,對於一些常用簡單的函數我們應該要了解,這能大大提高我們的工作效率。
  • 如何求形如∫dx/(√x+n√x)的不定積分
    本文主要內容:積分函數的分母為x的二次根式和x的n次根式的和,主要方法是換元法,通式計算及舉例如下。1.當n為奇數時的不定積分通式1.1舉例當n=3時的不定積分1.2舉例當n=5時的不定積分可見,n為奇數時,函數可積,且n越大,不定積分結果中函數類型越多越複雜。
  • [LeetCode] 996. Number of Squareful Arrays 平方數組的個數
    關於求有重複數字的全排列的講解可以參見上面的帖子,這裡就簡略的講講,首先要給原數組排序,使得重複的數字相鄰,便於跳過。在遞歸數組中,記得要跳過重複數字,然後要判斷是否是平方數組,若 out 不為空,則把前一個數字和當前數字相加,求 Double 型的平方根,這裡用了一個小 trick,對該平方根求 floor,若跟原平方根相同,則說明數字和是個完全平方數,因為若不是完全平方數的話,平方根會有小數部分,向下取整的話必定和之前不同了。
  • 已知x^2-y^2=xy,求(x+y)/(x-y)的
    主要內容:介紹通過正比例換元、中值換元、三角換元以及二次方程求根公式等方法,計算代數式(x+y)/(x-y)在x^2-y^2=xy條件下具體值的步驟。思路一:正比例替換設y=kx,代入已知條件得:x^2-(kx)^2=x*kx,(1-k^2)x^2=kx^2,1-k^2=k,則:k^2+k-1=0,由求根根式得:k=(-1±√5)/2;代數式=(x+kx)/(x-kx)=(1+k)/(1-k)=2±√5。
  • 3,4,5的大表哥歐拉猜想:n個整數的n次方之和是另一個整數的n次方...
    費馬說在整數n>2時,A,B,C 沒有正整數解,他進一步推廣,並猜想了許多的相關等式都不成立,特別是那句著名的梗:我有一個絕妙的證明但太長了寫不下,深深的印在我們的腦海裡。但費馬並沒有給出相關的證明,雖然我們沒發現費馬給出任何完整的證明,甚至說根本不存在,然而,費馬確實給出了一個在n=4的證明,這正好證明了費馬大定理在無數個其他情況下的正確性。
  • 辦公軟體操作技巧35:如何在excel中輸入平方,立方和n次方
    我們在編輯excel電子表格時,有時需要輸入帶有上標的公式,例如平方,立方和n次方等,今天就給大家分享如何在excel中輸入平方,立方和n次方。平方 立方 n次方方法一:快捷鍵法這時單元格內會出現公式編輯器,其中有兩個虛線矩形框;公式編輯器第4步:選擇裡面的大矩形框輸入「x」
  • 高中:給出x,y的不等式求x+y的值?關鍵在於如何構建函數
    原題原題:已知實數x,y滿足3x-y≤ln(x+2y-3)+ln(2x-3y+5),則x+y=?令x+2y-3=m,2x-3y+5=n,m>0,n>0,則x=(3m+2n-1)/7,y=(2m-n+11)/7,3x-y=m+n-2,x+y=(5m+n+10)/7。
  • N次方程求根公式歷史
    ax+b=0ax^2+bx+c=0ax^3+bx^2+cx+d=0……三次方程求根- Italy 費羅,France 伽羅瓦-古希臘人已經有了二次方程的求根公式;16世紀,義大利數學家費羅,給出了三次方程x^
  • 由e^x≥1+x衍生出的經典結論探究
    2.公式來源上述結論源自於泰勒公式,泰勒公式是將一個在x=x0處具有n階導數的函數f(x)利用關於(x-x0)的n次多項式來逼近函數的方法.若函數f(x)在包含x0的某個閉區間[a,b]上具有n階導數,且在開區間(a,b)上具有n+1階導數,則對閉區間[a,b]上任意一點x,成立下式:
  • 神奇的1與多項式次方
    不知道大家有沒有印象,有沒有注意過以下幾個巧合:首先請大家計算11的n次方:11的一次方11的二次方11的三次方11的四次方結果分別為:11,121,1331,14641其實這些數剛好就是n的組合數,也就是11的n次方這個數它的10的k次方位上應該是C(n,k),這個規律很好證明,只需要寫成(10+1)的n次方,然後二項式定理展開即可。