题目描述:
Count how many 1
in binary representation of a 32-bit integer.
Example
Given 32
, return 1
Given 5
, return 2
Given 1023
, return 9
Challenge
题目思路:
If the integer is n bits with m 1 bits. Can you do it in O(m) time?
这题就是bit shift。需要注意的是对于negative number,先convert成2‘s complementary,再做bit shift。
Mycode(AC = 14ms):
class Solution {
public:
/**
* @param num: an integer
* @return: an integer, the number of ones in num
*/
int countOnes(int num) {
// write your code here
// convert the negative number to 2's complementary
long long tmp = num < 0? (long long)(num) + pow(2, 32) : (long long)num;
int count = 0;
for (int i = 0; i < 32; i++) {
if (tmp % 2 == 1) {
count++;
}
tmp >>= 1;
}
return count;
}
};