返回

我的解题思路:理解反码,轻松攻克 LeetCode 476

见解分享

在 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 这道题其实并不难,只要掌握了反码的概念,就可以轻松解题。希望这篇文章能对大家有所帮助。