力扣简231 2的幂

 

 

 

 

 //我的思路,幂不停除二余数为0,结果为1.
//自己又没考虑到n=0的情况!
复制代码
 1 package leetcode01;
 2 /*给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
 3 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。*/
 4 public class Solution231 {
 5     //我的思路,幂不停除二余数为0,结果为1.
 6     public static boolean isPowerOfTwo(int n) {
 7         while(n!=1 && n!=0 && n%2==0) {//自己又没考虑到n=0的情况!
 8             n=n/2;
 9         }
10         if(n==1) {
11             return true;
12         }
13         return false;
14     }
15 
16     public static void main(String[] args) {
17         // TODO Auto-generated method stub
18         int n=12;
19         System.out.print(isPowerOfTwo(n));
20     }
21 
22 }
复制代码

 

题解一:位运算 用两种方法移除最末尾的1

 

 

复制代码
    //位运算两种方法移除最低位的1
    public static boolean isPowerOfTwo(int n) {
//        if(n>0 && (n&n-1)==0) {  //注意按位与的优先级小于等于号 需要加括号
//            return true;
//        }
//        return false;
        
        if(n>0 && (n&-n)==n) {
            return true;
        }
        return false;
    }
复制代码

 

题解二:

 

 

 

 

    //题解二:最大的int型的2的幂是2的30次幂,只需要看该数是不是2的30次的约数,题解此数的设置运用了移位的操作
    public static boolean isPowerOfTwo(int n) {
        final int BIG=1<<30;
        if(n>0 && BIG%n==0)
            return true;
        return false;
    }

 

posted @   Ssshiny  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示