[LeetCode]476. Number Complement
题目描述
思路
优化前
例如数字5,使用 5 ^ 7 得到结果2,获取7的方法,
num ^ mask = result
对num右移一位循环,直到num >= 1,在循环中计算mask *= 2,外层对mask减一得到mask
最终得到result
第一次优化
循环中使用 mask <<= 1 mask ^= 1替换乘法
代码
优化前
class Solution {
public:
int findComplement(int num) {
int temp = num, mask = 1;
while(temp >= 1) {
temp >>= 1;
mask *= 2;
}
mask--;
return (num ^ mask);
}
};
第一次优化
class Solution {
public:
int findComplement(int num) {
int temp = num, mask = 1;
while(temp > 1) {
temp >>= 1;
mask <<= 1;
mask ^= 1;
}
return (num ^ mask);
}
};