pow(x, n)
一、題目
實作 pow(x, n) ,即計算 x 的 n 次冪函式,
示例 1:
輸入: 2.00000, 10
輸出: 1024.00000
示例 2:
輸入: 2.00000, -2
輸出: 0.25000
解釋: 2-2 = 1/22 = 1/4 = 0.25
題解
解題思路
- 要判斷 n 的正負,以確定我們的底是 x 還是 1/x
- 經過分析
x^9 = x^4 * x^4 * x = (x^2 * x^2) * (x^2 * x^2) * x - 判斷 n 的奇偶性,已確定是否需要單獨考慮
- 如果是奇數,那么需要多乘一次 x 本身,因為 Math.floor 向下取整,9 / 2=> 4, 4 + 4 = 8,少了 1 個
- 如果是偶數,那么不需要考慮,直接降半即可
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
var myPow = function(x, n) {
// 分析n
if (n === 0) return 1;
if (n === 1) return x;
if (n < 0) {
x = 1 / x;
n = -n;
}
let res = 1;
// x^7 = x^1 * x^2 * x^4
// x^9 = x^4 * x^4 * x = (x^2 * x^2) * (x^2 * x^2) * x
while (n > 0) {
// if(m是奇數,m的個位是1),就多乘1次x,因為我們是做向下取整
// &表示 2進制數字的相與
// 如果是奇數,拿x^9舉例,那么第一次res = 1 * x,最后一次是1,res = x * x ^ 8
// 如果偶數,拿x^8舉例,那么第一次res = 1 * x ^ 8
if ((n & 1) === 1) res *= x;
n = Math.floor(n / 2);
x *= x; // x = x^2 底就要平方,每降一半,自己就要平方一次
}
return res;
};
LeetCode 結果
執行用時:76 ms, 在所有 JavaScript 提交中擊敗了95.38%的用戶
記憶體消耗:39.6 MB, 在所有 JavaScript 提交中擊敗了5.03%的用戶
三、寫在最后
本文是附加題,可能僅僅借助了二分思想中的一部分,加油!
如果對你有所幫助不妨給本專案的github 點個 star,這是對我最大的鼓勵
關于我
- 花名:余光
- WX:j565017805
- 沉迷 JS,水平有限,虛心學習中
其他沉淀
- 前端進階筆記
- JS 版 LeetCode 題解
- CSDN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/238572.html
標籤:其他
上一篇:javascript 的物件詳解
