一、题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
二、思路解析
1.暴力枚举
2的幂的结果在范围有限的情况下,是可以列举出来所有的。
2.位运算
2的幂可以由位运算来表示,比如与运算,各个位都是1的时候,结果是1,其余结果都是0.
1)2的幂的规律是最高位为1,其余都是0;
2)2的幂-1的数的规律是:所有位都是1;
3)与运算的规律是
同为1,才为1,其余都是0。
所以2的幂和2的幂-1的与运算结果是0,那么这个时候就可以返回true。
三、代码
1.暴力枚举java
class Solution {
public boolean isPowerOfTwo(int n) {
switch (n) {
case 1://2的0次方,
case 2://2的1次方
case 4://2的2次方
case 8://2的3次方
case 16://2的4次方
case 32://2的5次方
case 64://2的6次方
case 128://2的7次方
case 256://2的8次方
case 512://2的9次方
case 1024://2的10次方
case 2048://2的11次方
case 4096://2的12次方
case 8192://2的13次方
case 16384://2的14次方
case 32768://2的15次方
case 65536://2的16次方
case 131072://2的17次方
case 262144://2的18次方
case 524288://2的19次方
case 1048576://2的20次方
case 2097152://2的21次方
case 4194304://2的22次方
case 8388608://2的23次方
case 16777216://2的24次方
case 33554432://2的25次方
case 67108864://2的26次方
case 134217728://2的27次方
case 268435456://2的28次方
case 536870912://2的29次方
case 1073741824:return true;
}
return false;
}
}
2.位运算找规律java
class Solution {
public boolean isPowerOfTwo(int n) {
if(n <= 0){
return false;
}
return (n & (n - 1)) == 0;
}
}