题目地址:
https://www.lintcode.com/problem/o1-check-power-of-2/description
给定一个数,要求
O
(
2
)
O(2)
O(2)的时间判断其是否为
2
2
2的幂次。只需看其二进制表示中是否只有一个
1
1
1即可。但需要注意Integer.MIN_VALUE
也满足这个条件,所以要判断一下这个数要是正数。判断其是否只含一个
1
1
1可以用lowbit来解决。其中lowbit(x) = x & -x
,指的是x
的二进制表示最右边的
1
1
1所代表的十进制数是几。这可以由-x = ~x + 1
得到。代码如下:
public class Solution {
/**
* @param n: An integer
* @return: True or false
*/
public boolean checkPowerOf2(int n) {
// write your code here
return n > 0 && n == (n & -n);
}
}
时空复杂度 O ( 1 ) O(1) O(1)。