题目描述
输入一个整数,输出二进制中1的个数
右移
int NumberofOne(int number)
{
int count = 0;
while(number !=0)
{
int a =number & 1;
if( (number & 1 )== 1 )
{
count++;
}
number = number>>1;
}
return count;
}
右移负数,符号为一直为1,陷入死循环
采取左移1,先判断最后一位是否为1,是的话count+1,左移1,判断次低位
int NumberofOne(int number)
{
int count = 0;
unsigned int flag = 1;
while(flag != 0)
{
if(number & flag )
count ++;
flag = flag<<1;
}
}
把一个整数减去1,再和原整数做运算,会把整数最右边的1变成0
int NumberofOne(int number)
{
int count = 0;
while(n)
{
++ count;
n = (n-1) & n;
}
}
leetcode
- 比特位计数
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
动态规划
class Solution {
public:
vector<int> countBits(int num) {
vector<int>res(num+1, 0);
for(int i=1; i<=num; i++)
{
res[i] = res[i&(i-1)] +1;
}
return res;
}
};