Pow(x, n)
阿新 • • 發佈:2020-08-07
實現 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.0
n 是 32 位有符號整數,其數值範圍是 [−231, 231 − 1] 。
解題思路:
暴力:根據冪次,將底數自乘冪次(n次),迴圈得到結果,負數指數也只是正數結果分之一,這種方法不用想就知道肯定超時的
改進暴力:折半計算,當指數為偶數(n %20)時,就是\(x^n = x ^{(n/2)^2}\),如求2的8次冪,就等於2的4次冪的平方,而2的4次冪有等於2的2次冪的平方,2的2次冪有等於2的一次冪的平方,2的一次冪就等於2的0次冪的平方再乘與2也就是2本身;當指數為奇數時(n % 21),除了上述的平方外,還需要再乘一次底數x
通過折半計算,每次把n減半,降低了空間複雜度,也降低了時間複雜度
class Solution { public: double myPow(double x, int n) { double res = 1.0; for(int i = n; i != 0; i /= 2){ if(i % 2 != 0){ res *= x; } x *= x; } return n < 0 ? 1 / res : res; } };