位运算:n & (n - 1)
睡不醒的鲤鱼 2021-05-15 每日一题 LeetCode
题目
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
解析
循环去除 n 的最后一位 1,直至 n 的值为 0,统计循环的次数即可。
代码
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans = 0;
while (n) {
n &= (n - 1);
ans++;
}
return ans;
}
};
1
2
3
4
5
6
7
8
9
10
11
func hammingWeight(num uint32) int {
ans := 0
for num != 0 {
num &= num - 1
ans++
}
return ans
}
1
2
3
4
5
6
7
8
题目
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
解析
由于 2 的幂次方的二进制形式中只包含一个 1,因此将其去掉后判断是否为 0 即可。
代码
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
};
1
2
3
4
5
6
func isPowerOfTwo(n int) bool {
return n > 0 && (n&(n-1)) == 0
}
1
2
3