【每日一題】Leetcode50. Pow(x,n)
阿新 • • 發佈:2022-01-08
題目大意: 實現 pow(x, n) ,即計算 x 的 n 次冪函式(即,xn )。
如下:
x→x2→x4→x8→x16→x32→x64
比如從 x 開始,每次直接把上一次的結果進行平方,計算 6 次就可以得到 x^{64}. x64
的值,而不需要對 x 乘 63 次 x。
再舉一個例子,如果我們要計算 x^77
,我們可以按照:
x→x2→x4→x9→x19→x38→x77的順序 將上一次的結果進行平方
在每一步中,我們不知道在將上一次的結果平方之後,還需不需要額外乘 xx。但如果我們從右往左看,分治的思想就十分明顯了:
當我們要計算 x^n時,我們可以先遞迴地計算出 y = x^{n/2}.
,其中 [a] 表示對 a 進行下取整;
根據遞迴計算的結果,如果 nn 為偶數,那麼 x^n = y^2;如果 n 為奇數,那麼 x^n=y2 × x;
題解:
class Solution { public double myPow(double x, int n) { long N = n; //如果是負數的話就是導數了 return N>=0? quickMul(x,N) : 1.0/quickMul(x,-N); } public double quickMul(double x,long N){ if (N == 0){ return 1.0; } double y = quickMul(x,N/2); return N%2 == 0 ? y*y : y*y*x; } }