Using O(1) time to check whether an integer n is a power of 2.
Example
For n=4, return true;
For n=5, return false;
思路:2的幂次方(2^n)的二进制表达法只有一位为1,其他位都为0,而(2^n-1)则是和(2^n)对应位置正好不一样
例如8的二进制1000,7的二进制0111
因为二者可以进行按位与运算,因为按位与运算只有两位同时为1时,结果才为1,否则为0
注意:参加运算的两个数据,按二进制位进行“与”运算,运算规则:0&0=0;
class Solution {
/*
* @param n: An integer
* @return: True or false
*/
public boolean checkPowerOf2(int n) {
if(n<=0){
return false;
}
return (n&(n-1))==0?true:false;
}
};关于位运算:
点击打开链接
本文介绍了一种使用O(1)时间复杂度的方法来检查一个整数是否为2的幂次方。利用位运算的特点,通过观察n与n-1的二进制形式,如果n为2的幂,则n与n-1进行按位与运算结果为0。
766

被折叠的 条评论
为什么被折叠?



