问题描述:
代码:
class Solution {
public boolean isPowerOfTwo(int n) {
return (n>0)&&(n&(n-1))==0;
}
}
思路:
一个数 n 是 2 的幂,当且仅当 n 是正整数,并且 n 的二进制表示中仅包含 1 个 1。
因此我们可以考虑使用位运算,将 n 的二进制表示中最低位的那个 1 提取出来,再判断剩余的数值是否为 0 即可。n & (n - 1):其中 & 表示按位与运算。该位运算技巧可以直接将 n 二进制表示的最低位 1移除,它的原理如下:因此,如果 n 是正整数并且 n & (n - 1) = 0,那么 n 就是 2 的幂。
问题描述:
代码:
public class Solution {
public int hammingWeight(int n) {
int ret = 0;
for (int i = 0; i < 32; i++) {
if ((n & (1 << i)) != 0) {
ret++;
}
}
return ret;
}
}
思路:
我们得出一个快速的算法 M << n 其实可以这么算 M << n = M * 2n (2的n次方)