190.颠倒二进制位
给一个无符号整形数字,将其二进制形式的排列方式反转。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result = 0;
for(int i = 0;i < 32;i++)
{
result = (result << 1) + (n >> i & 1);
}
return result;
}
};
具体思路为定义一个无符号整形数字“result”,每次循环都将result向左移一位,再加上n的第i位的二进制数。因为是从0循环到31,所以n的二进制位也是从0到31的过程赋给result的31到0位(因为result每次循环都左移,所以一开始的0位到最后为左移到31位)。最后返回result。此方法为题解给出,使用了 位运算。
191.位1的个数
给一个无符号整形数字,得出其二进制形式中的为1的数的数量。
class Solution {
public:
int hammingWeight(uint32_t n) {
int count = 0;
while(n > 0)
{
if(n % 2 == 1)
{
count++;
}
n = n / 2;
}
return count;
}
};
具体思路为:判断n是否为偶数,为偶数则代表为1的位置的数量增加。此题本是想将n转化为二进制形式,再转换为string类型,最后循环查看此string变量中那个为1,但不知到是没有转为二进制的方式,还是我没找到,最后答案是在chatgpt中搜索转二进制方法时给出的代码中找到解题方法。
#include <iostream>
using std::cout;
using std::endl;
void decimalToBinary(int num)
{
if (num == 0)
{
cout << "Binary representation: 0" << endl;
return;
}
int binary[32]; // 用于存储二进制位的数组
int index = 0; // 数组索引
while (num > 0)
{
binary[index] = num % 2; // 取余数
num = num / 2; // 更新num为商
index++;
}
cout << "Binary representation: ";
// 逆序输出二进制位
for (int i = index - 1; i >= 0; i--)
{
cout << binary[i];
}
cout << endl;
}
int main()
{
int num = 10;
decimalToBinary(num);
return 0;
}
此为chatgpt给出的方法。