前言
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
一、示例
示例 1:
输入: 2
输出: [0,1,1]
示例 2:
输入: 5
输出: [0,1,1,2,1,2]
二、代码解析
1.比特位计数
代码如下(示例):
vector<int> countBits(int num)
{
vector<int> arr;
for (int i = 0; i <= num; i++)
{
int index = bitset<32>(i).count();//计算二进制数中有多少个1
arr.push_back(index);
}
return arr;
}
2.测试代码
代码如下(示例):
#include<vector>
#include<bitset>
#include <iostream>
using namespace std;
vector<int> countBits(int num)
{
vector<int> arr;
for (int i = 0; i <= num; i++)
{
int index = bitset<32>(i).count();//计算二进制数中有多少个1
arr.push_back(index);
}
return arr;
}
int main()
{
vector<int> nums = countBits(5);
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i] << " ";
}
}
3.结果
三、C++ bitset 用法
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1 bit空间。
1.构造函数
bitset常用构造函数有四种,如下
bitset<4> bitset1; //无参构造,长度为4,默认每一位为0
bitset<8> bitset2(12); //长度为8,二进制保存,前面用0补充
string str = "100101";
bitset<10> bitset3(str); //长度为10,前面用0补充
char str2[] = "10101";
bitset<13> bitset4(str2); //长度为13,前面用0补充
cout << bitset1 << endl; //0000
cout << bitset2 << endl; //00001100
cout << bitset3 << endl; //0000100101
cout << bitset4 << endl; //0000000010101
2.一些函数
int main()
{
cout << bitset<8>(5) << endl;
cout << bitset<8>(5).count() << endl; //2(count函数用来求bitset中1的位数,共有2个1)
cout << bitset<8>(5).size() << endl; //8(size函数用来求bitset的大小,一共有8位)
cout << bitset<8>(5).test(0) << endl; //true (test函数用来查下标处的元素是0还是1,并返回false或true,此处[0]为1,返回true)
cout << bitset<8>(5).test(1) << endl; //false (同理,[1]为0,返回false)
cout << bitset<8>(5).any() << endl; //true (any函数检查bitset中是否有1)
cout << bitset<8>(5).none() << endl; //false (none函数检查bitset中是否没有1)
cout << bitset<8>(5).all() << endl; //false (all函数检查bitset中是全部为1)
}
3.结果
总结
版权声明:本文为m0_46208939原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。