返回
我的解题思路:理解反码,轻松攻克 LeetCode 476
见解分享
2023-10-29 13:48:54
在 LeetCode 中,有一道题叫「数字的补数」,题目要求我们给定一个正整数,求出它的补数。乍一看,这道题可能有点难,但其实只要掌握了反码的概念,就可以轻松解题。
什么是反码?
反码其实就是将一个数字的每一位都取反,比如数字 123 的反码是 076。需要注意的是,反码只是第一步,求补数还需要再做一步操作。
什么是补数?
补数就是在反码的基础上,再加 1。比如数字 123 的补数是 077。
如何用位运算求补数?
用位运算求补数其实很简单,只要用 ~
运算符取反,再用 +1
运算符加 1 就可以了。比如数字 123 的补数就可以用以下代码求出:
int num = 123;
int complement = ~num + 1;
LeetCode 476 的解题思路
现在,我们已经掌握了求补数的方法,就可以来解决 LeetCode 476 这道题了。这道题的解题思路很简单,只需要将给定的正整数转换成二进制,然后对每一位取反,再加 1,最后将结果转换成十进制即可。
代码实现
import java.util.Scanner;
public class Solution {
public int findComplement(int num) {
// 将数字转换成二进制字符串
String binaryString = Integer.toBinaryString(num);
// 对二进制字符串的每一位取反
StringBuilder sb = new StringBuilder();
for (int i = 0; i < binaryString.length(); i++) {
if (binaryString.charAt(i) == '0') {
sb.append('1');
} else {
sb.append('0');
}
}
// 将反码字符串转换成十进制
int complement = Integer.parseInt(sb.toString(), 2);
// 返回补数
return complement;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入
int num = scanner.nextInt();
// 求补数
Solution solution = new Solution();
int complement = solution.findComplement(num);
// 输出结果
System.out.println(complement);
}
}
结语
LeetCode 476 这道题其实并不难,只要掌握了反码的概念,就可以轻松解题。希望这篇文章能对大家有所帮助。