问题:
Given an integer, write a function to determine if it is a power of two.
解决:
① Power of Two是指类似于2^0 ~ 2^n 的数。
public class Solution {//2ms
public boolean isPowerOfTwo(int n) {
while(n >= 2){
if(n % 2 == 0) n /= 2;
else return false;
}
return n == 1;
}
}
② 如果是power of two, 则2进制表达中,有且仅有一个1. nteger.bitCount(int i):给定一个int类型数据,返回这个数据的二进制串中“1”的总数量。
public class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && Integer.bitCount(n) == 1;
}
}
③ 可以通过移位来数1的个数(位操作), 这里用了一个巧妙的办法, 即判断 N & (N-1) 是否为0.
public class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && ((n & (n - 1)) == 0 );
}
}
④ 使用log函数的特性。
public class Solution {//2ms
public boolean isPowerOfTwo(int n) {
return n > 0 && ((int)(Math.log10(n) / Math.log10(2)) == Math.log10(n) / Math.log10(2));
}
}