zoukankan      html  css  js  c++  java
  • LeetCode 231. Power of Two

    Given an integer, write a function to determine if it is a power of two.

    Credits:
    Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

    题意:给定一个整数,判断其是否为2的n次方。

    方法一:直接判断。

    public boolean isPowerOfTwo(int n) {
            if(n < 1)
                return false;
            while(n > 1){
                if(n % 2 != 0)
                    return false;
                n /= 2;
            }
            return true;
        }

    方法二:利用2的n次方数的二进制形式的特点:2的n次方数的二进制只有高位1个1,剩下均为0.

    例:十进制:1,二进制:1; 

      十进制:2,二进制:10;

      十进制:4,二进制:100;

      十进制:8,二进制:1000;

     判断n的最低位是否为1,然后将n右移一位,判断n是否只存在唯一一个1

    public boolean isPowerOfTwo(int n) {
            if (n <= 0)
                return false;
            while (n != 0) {
                int bit = n & 1;//判断最低位是否为1,如果最低位为1,则bit=1;否则bit=0
                n = n >>> 1;//n向右移一位
                if (bit == 1 && n != 0) {//未右移前的n最低位为1,且右移一位后的n'不为0。说明未右移前的n至少存在两个1
                    return false;
                }
            }
            return true;
        }

    方法三:使用n&(n-1)来判断一个数是否是2的方幂

    public boolean isPowerOfTwo(int n) {
            return n > 0 && ((n & (n - 1)) == 0 ); 
        }

     关于n&(n-1)

    n&(n-1)可以将n的二进制表示中的最低位为1的改为0(即将n的二进制中的最后一个1改为0)。因此,如果n的二进制只有1个1,经过n&(n-1)就会变成0了。

    &的运算规则:仅当对应位的两个数都为1时,结果才为1;否则为0。

    例:4的二进制是100,4 - 1 = 3,3的二进制是11,4 & 3 = 000. 将4的二进制100中的最低位的1(100的最低位的1即其仅有的1)变成了0

      5的二进制是101,5 - 1 = 4,4的二进制是100,5 & 4 = 100. 将5的二进制101中的最低位的1变成了0

  • 相关阅读:
    Vue
    Vue
    Vue
    Vue
    Vue
    kubernetes
    kubernetes
    kubernetes
    django源码bug解决方案
    UNI-APP 桌面LOGO角标设置(ios)
  • 原文地址:https://www.cnblogs.com/zeroingToOne/p/8186009.html
Copyright © 2011-2022 走看看