题目:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
说明:刚开始做到这个题的时候看着特别简单,其实真的特别简单,可惜是我忘了位与运算符的问题,没有仔细理解题意;
然后就去看了看操作符发现想起2^n最高为都是1其余为0,于是利用这一点和2^n-1相 与 原因很简单,2^n-1相当于2^n的冥取1'S的补码 知道这一点就可以了。
package java_Algorithm_LeetCode;
public class Power_of_Two_231 {
/**leetcode #231
*
* O(1)
* 1 10 100 1000 10000
* @param n
* @return
*/
public static boolean isPowerOfTwo(Integer n) {
if(n<=0) {
return false;
}
else if((n&(n-1))==0) {
return true;
}
else {
return false;
}
}
public static void main(String[] args) {
int a=1;
int b=16;
int c=218;
int s=0;
int e=-2147483648;
System.out.println(isPowerOfTwo(a));
System.out.println(isPowerOfTwo(b));
System.out.println(isPowerOfTwo(c));
System.out.println(isPowerOfTwo(s));
System.out.println(isPowerOfTwo(e));
}
}
注意:我们在做的过程中可能会忽视n<=0的情况 这点要注意。