342. 4的幂-leetcode
2018-12-25 本文已影响0人
佛祖拿屠刀
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
使用循环或者递归很简单,就不会赘述了
如何使用位运算来完成这个题目
首先需要判断是不是2
的幂
(n - 1) & n == 0 真为是 假为否
在观察4
的幂的二进制特色
1
100
10000
1000000
...
如果这个数是2
的幂,且奇数位为1
,那么这个数同样也是4
的幂
n & 0x55555555 != 0 真为是 假为否
代码如下:
class Solution {
func isPowerOfFour(_ num: Int) -> Bool {
if num & (num - 1) == 0 {
return (num & 0x55555555) > 0
}
return false
}
}