• Leetcode题目:Power of Four


    题目:Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

    Example:
    Given num = 16, return true. Given num = 5, return false.

    Follow up: Could you solve it without loops/recursion?

    需要注意的是,本题需要我们不使用循环或递归,因而很自然地想到了关于位操作的方法。

    观察以下数列:

    0 ---二进制--->    0     *

    1 ---二进制--->    1

    2 ---二进制--->    10

    3 ---二进制--->    11

    4 ---二进制--->    100     *

    5 ---二进制--->    101

    6 ---二进制--->    110

    7 ---二进制--->    111

    8 ---二进制--->    1000     *    

    9 ---二进制--->    1001

    10 ---二进制--->    1010

    11 ---二进制--->    1011

    12 ---二进制--->    1100

    13 ---二进制--->    1101

    14 ---二进制--->    1110

    15 ---二进制--->    1111

    16 ---二进制--->    10000     *

    可以发现,所有是4的倍数的数字,它们的二进制都仅有一个1,剩余都是0。并且,需要注意的是,这些1都是在奇数为分布。

    根据以上条件,可以给出如下的代码:

    class Solution {
    public:
        bool isPowerOfFour(int num) {
            int num_minus = num - 1;
            if((num & num_minus) == 0)
            {
                if((num & 0x55555555) != 0)
                {
                    return true;
                }
            }
            return false;
        }
    };

  • 相关阅读:
    数字滤波器
    PCL点云库:Kd树
    KNN算法与Kd树
    分布式锁与实现(一)——基于Redis实现
    Redis分布式锁的正确实现方式
    redis常用命令大全
    使用 Redis 实现排行榜功能
    RabbitMQ下的生产消费者模式与订阅发布模式
    java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱
    Java进阶面试题大集合-offer不再是问题
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5408444.html
Copyright © 2020-2023  润新知