力扣简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; }

浙公网安备 33010602011771号