写在前面:本文题单均来自力扣的算法刷题计划,开这个系列主要是以题目与题解的形式对一些常见、常用算法进行归类和总结,希望在促进自己学习的同时也能帮助到看到这篇文章的大家。另外,本文并非一天一更~
目录
题目一:231. 2 的幂
题目描述:
题目分析:
位运算,若(n & -n)==n,则n为2的幂次方。以4为例子,二进制源码为0100,其负数的二进制为补码表示,源码取反再+1,为1100,0100 & 1100 结果仍为0100,所以可以用此方法进行验证。
题解代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0)
return false;
if((n & -n)==n)
return true;
return false;
}
};
题目二:191. 位1的个数
题目描述:
题目分析:
n&=n-1,每次可以把n末尾的1去掉,所以让计数直接加1即可。
题解代码:
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt=0;
while(n)
{
cnt++;
n&=n-1;
}
return cnt;
}
};