美文网首页
342. 4的幂-leetcode

342. 4的幂-leetcode

作者: 佛祖拿屠刀 | 来源:发表于2018-12-25 22: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
        }
    }

    相关文章

      网友评论

          本文标题:342. 4的幂-leetcode

          本文链接:https://www.haomeiwen.com/subject/penqlqtx.html