476. Number Complement
一、问题描述
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
二、输入输出
Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
三、解题思路
- 把num不断右移(相当于是除以2),然后对2取余数,可以不断取出各个bit
- 将这些bit存储在vector中,并进行翻转
- 降vector中各个bit左移(相当于是乘以2的多少次方)然后加起来即可
class Solution {
public:
int findComplement(int num) {
int cur = num, sum = 0;
vector<int> ret;
while(cur != 0){
ret.push_back(cur % 2);
cur = cur >> 1;
}
for (int i = 0; i < ret.size(); i++){
ret[i] = !ret[i];
sum += (ret[i] << i);
}
return sum;
}
};