题目分析
题目链接,登录 LeetCode 后可用
这道题目要求是求一个正整数的补数,并且假设正整数的二进制形式不以 0 开头。所有我们要做的就是找到第一个非 0 的位置,然后依次开始翻转就可以了。
代码
class Solution {
public int findComplement(int num) {
boolean flag = false;
// 题目要求是 32 位整数
for(int i = 31; i >= 0; i--) {
// 找到第一个 1
if((num & (1 << i)) != 0) {
flag = true;
}
// 翻转该位
if(flag) {
num ^= (1 << i);
}
}
return num;
}
}
网友评论