力扣简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 @ 2022-06-01 16:03  Ssshiny  阅读(32)  评论(0)    收藏  举报