題目描述
給定一個整數,寫一個函式來判斷它是否是 4 的冪次方。如果是,返回 true
;否則,返回 false
。
整數 n
是 4 的冪次方需滿足:存在整數 x
使得 n == 4x
示例 1:
輸入: n = 16
輸出: true
示例 2:
輸入: n = 5
輸出: false
示例 3:
輸入: n = 1
輸出: true
力扣原題目地址 4 的冪:https://leetcode.cn/problems/...
類似題目還有3的冪,2的冪,用遞迴思想解決,一個意思
力扣原題目地址 3 的冪:https://leetcode.cn/problems/...
力扣原題目地址 2 的冪:https://leetcode.cn/problems/...
思路分析
- 整數
n
如果是0
,肯定不是4
的冪了,如果是1
,就是4
的0次冪
。 - 這樣的話,我們就把整數
n
不停的除以4
,如果除到最後的結果是1
,那麼是冪。 - 如果除的話,得到的數是一個
小數
,那麼就肯定不是冪了
這裡又延伸出一個問題,就是,js中如何判斷一個數,是不是整數?
沒關係,語言的設計者們,早已經考慮到這種情況了,於是給我們一個api
叫做:Number.isInteger()
,用於判斷一個數字是不是整數,如下:
Number.isInteger(0); // true
Number.isInteger(1); // true
Number.isInteger(-100000); // true
Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger("10"); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false
這樣的話,我們們直接拿來使用即可
程式碼附上
var isPowerOfFour = function (n) {
if (n === 0) { // 0肯定不是,直接返回false
return false
}
else if (n == 1) { // 4的0次方等於1,是返回true
return true
} else {
n = n / 4 // 4的冪、3的冪、2的冪
if (Number.isInteger(n)) { // 如果是整數,就繼續遞迴
return isPowerOfFour(n) // return的結果為遞迴執行的結果
} else { // 如果不是整數,就說明絕對不是4的n次方
return false
}
}
};
提交結果圖
嗯,湊合還行...
3的冪、2的冪的題目,改一下值即可