您的位置:首页 > 编程语言 > C语言/C++

Counting Bits leetcode 338

2016-04-15 00:24 225 查看
题目大意:计算数字的二进制中'1'的个数。

思路:计算'1'的个数是常见的题目了,什么 x&x-1 把最右边的1变成0 ,什么 y | y+1把最右边的0变成1之类的,常见不鲜。

根据题后面的hints,计算较大的数时可以利用前面的计算结果,把同余数位置上已经得到的结果+1就行,比如计算7的结果,只要用3的结果+1即可。carry的值要根据计算到的值,每到2的幂就左移1位。 

AC code:

class Solution {
public:
vector<int> countBits(int num) {
vector<int> res(num + 1);
for (int i = 1, carry = 0; i <= num; ++i) {
if (i & i - 1) {
res[i] = res[i - carry] + 1;
} else {
res[i] = 1;
if(carry > 0)
carry <<= 1;
else ++carry;
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息