zoukankan      html  css  js  c++  java
  • 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;
        }
    };

  • 相关阅读:
    原码、反码、补码详解
    进制转换
    目录
    Window【目录】
    排序算法——冒泡排序
    算法的时间复杂度与空间复杂度
    排序算法
    递归—八皇后问题
    递归—迷宫问题
    递归
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5408444.html
Copyright © 2011-2022 走看看