338Counting Bits(ok);191(ok);190(ok);231(ok);326(see)

啊哈哈哈哈,好久没写代码了,居然一把过了,好开心!

338:简单

 void add_One(string &s, int &num)
{
int inc = 1;
for (int i = s.size()-1; i >=0; i--)
{
int t = (inc + s[i] - '0') % 2;
inc = (inc + s[i] -'0') / 2;

if (s[i] == '1')

if (!t)
num--;
s[i] = '0' + t;
}
else

if (t)
num++;
s[i] = '0' + t;
}
}
if (inc)
{
s = '1' + s;
num++;
}
}
vector<int> countBits(int num) {
vector<string> binary(num+1, "");
binary[0] = "0";
vector<int> count(num + 1, 0);
for (int i = 1; i <= num; i++)
{
binary[i] = binary[i - 1];
count[i] = count[i - 1];
add_One(binary[i], count[i]);
}
return count;
}


191:简单

int hammingWeight(uint32_t n) {
int size = 0;
while (n)
{
size += (n%2);
n = n / 2;
}
return size;
}

190:简单,需要注意转换为二进制时需要补全32位

uint32_t reverseBits(uint32_t n) {
uint32_t re=0;
int count=0;
while(n||count<32)
{
count++;
re=re*2+n%2;
cout<<n%2;
n=n/2;
}
return re;
}

231:

bool isPowerOfTwo(int n) {
while(n)
{
if (n%2==1)
{
if (n/2==0)
return true;
else
return false;
}
n=n/2;
}
return false;
}

另外一种解法:检查n&(n-1)的值

326:

除了循环处理外,还有一种思路:

先算出int类型3幂数的最大值MAX,用MAX除以n

bool isPowerOfThree(int n) {
       int MAX=1162261467;
if (n<1||n>MAX)
{
return false;
}
else
{
return MAX%n==0;
}
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值