zoukankan      html  css  js  c++  java
  • LeetCode 腾讯精选50题--2的幂

    在二进制中,2的幂的数字用二进制表示时只会有一位表示为1,其余都为0,基于这个前提,可以有两种方案:

      1. 做位移操作

      2. 与数值取反并与原数值做与操作,判断是否与原来的数值相同

    对于方案1,我的想法是对数值 n 先做一次右移的移位操作,然后在对右移后的数做左移操作,判断两次操作前后的数值是否相同,以下是代码:

     1 public boolean isPowerOfTwo(int n) {
     2 
     3         for(int i=0;i<32;i++){
     4             int temp = n >> i;
     5             int large =  temp << i;
     6             if(n != large){
     7                 return false;
     8             }
     9             if(temp == 1){
    10                 return true;
    11             }
    12         }
    13         return false;
    14     }

    对于方案2,就很简单了,做与操作就可以了,由于计算机中负数的二进制表示是先对正数按位取反,然后再加1实现的,所以对于 n & -n  如果n是2的幂,二进制表示中只有一位为1,设位置为k,-n 这是从低位开始,直到k之前的都是0,k之后的都为1,与操作后还是 n

    1  public boolean isPowerOfTwo2(int n){
    2 
    3         return (n > 0) && ((n & (-n)) == n);
    4     }
  • 相关阅读:
    专职DBA-MySQL主从延时复制
    专职DBA-MySQL主从异步复制
    专职DBA-MySQL连接启动与多实例数据库
    Java日期时间2
    Java日期时间
    763. Partition Labels
    377. Combination Sum IV
    459. Repeated Substring Pattern
    784. Letter Case Permutation
    526. Beautiful Arrangement
  • 原文地址:https://www.cnblogs.com/Kaithy-Rookie/p/11341866.html
Copyright © 2011-2022 走看看