啊哈哈哈哈,好久没写代码了,居然一把过了,好开心!
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;
}
}