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
    }
}
上一篇 下一篇

猜你喜欢

热点阅读