#青训营笔记创作活动

62 阅读2分钟

题目描述

题目要求我们计算一个非负整数 N 的二进制反码对应的十进制数。二进制反码是指将二进制表示中的每一位 1 变为 00 变为 1

解题思路

  1. 二进制转换:首先将给定的十进制数 N 转换为二进制字符串。
  2. 反码操作:遍历二进制字符串的每一位,将其反转(0 变为 11 变为 0)。
  3. 转换回十进制:将反码后的二进制字符串转换回十进制数。

数据结构选择

  • StringBuilder:用于构建反码后的二进制字符串,因为 StringBuilder 在字符串拼接操作中比 String 更高效。

算法步骤

  1. 转换为二进制字符串:使用 Integer.toBinaryString(N) 方法。

  2. 反码操作:遍历二进制字符串的每一位,使用条件运算符 ? : 进行反转。

  3. 转换回十进制:使用 Integer.parseInt(invertedBinary.toString(), 2) 方public class Main { public static int solution(int N) { // Step 1: Convert the decimal number to binary string String binaryString = Integer.toBinaryString(N);

    // Step 2: Perform the bitwise NOT operation (invert the bits)
    StringBuilder invertedBinary = new StringBuilder();
    for (char bit : binaryString.toCharArray()) {
        // Invert each bit
        invertedBinary.append(bit == '0' ? '1' : '0');
    }
    
    // Step 3: Convert the inverted binary string back to decimal
    int result = Integer.parseInt(invertedBinary.toString(), 2);
    
    return result;
    

    }

    public static void main(String[] args) { System.out.println(solution(5) == 2 ? 1 : 0); System.out.println(solution(10) == 5 ? 1 : 0); System.out.println(solution(0) == 1 ? 1 : 0); } }#### 个人思考

  4. 效率问题:虽然当前的实现已经足够高效,但如果 N 非常大,二进制字符串的长度也会非常长,可能会影响性能。可以考虑优化反码操作的实现方式。

  5. 边界情况:特别注意 N = 0 的情况,其二进制反码为 1,需要单独处理。

  6. 代码可读性:代码结构清晰,注释详细,便于理解和维护。

总结

通过这个题目,我学会了如何处理二进制数的反码操作,并且理解了如何在不同进制之间进行转换。同时,我也意识到在处理大数据时,性能优化是一个需要考虑的重要因素。