zoukankan      html  css  js  c++  java
  • leetcode刷题9

    今天遇到的题是LeetCode第231题。该题是一道简单题,要求输入一个数n,判断这个数是不是2的幂次方
    看到这个题,首先想到的就是利用位运算,因为二进制的位运算是比较高效的
    我自己的解决方案是下面的代码:

    public static boolean judge(int n){
        int num=1;
        boolean flage=false;
        while (num<=n){
            if (num==n){
                flage=true;
               break;
            }else {
                num=num<<1;
            }
        }
        return flage;
    }            

    但是该方案在n特别大的时候,会超时。在参考了其他人的解答方案后,发现如果一个数n是2的幂次方,那么这个数一定满足三个条件:

    ①这个数的二进制最高位是1,其他位是0;
    ②这个数减一的最高位是0,其他位是1;
    ③这个数一定大于0
    因此可以利用位运算中的与,代码如下:

    public static boolean judge2(int n){
        //if (n<=0) return false;
        //return ((n&(n-1))==0);
        //或者写成
        return n>0 && (n&(n-1))==0;
    }
    

      

  • 相关阅读:
    JS_ ','逗号
    JS_prettyBanner[说给自己听]
    JS_关键字详细
    CSS_圣杯
    JS_ifream通信
    [转]<!DOCTYPE html>
    JS_ImageLazylode[说给自己听]
    CSS_负边距
    JS_waterfall[说给自己听]
    JS_call,apply
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11350500.html
Copyright © 2011-2022 走看看