给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-four
思路:
不使用循环或者递归来完成,那么则可以用位运算计算,首先4的幂必然也是2的幂,所以需要通过以下式子来判断:num > 0 && (num & (num - 1)) === 0
然后对于4的幂,则由模运算的分配率a * b % 3 === (a % 3) * (b % 3)
,可得4````%3 === 1
以上两个式子同时满足则为4的幂。
复杂度分析:
时间复杂度O(1)
空间复杂度O(1)
var isPowerOfFour = function(num) {
return num > 0 && (num&(num-1)) === 0 && num % 3 ===1;
};