题目描述
题目要求我们计算一个非负整数 N 的二进制反码对应的十进制数。二进制反码是指将二进制表示中的每一位 1 变为 0,0 变为 1。
解题思路
- 二进制转换:首先将给定的十进制数
N转换为二进制字符串。 - 反码操作:遍历二进制字符串的每一位,将其反转(
0变为1,1变为0)。 - 转换回十进制:将反码后的二进制字符串转换回十进制数。
数据结构选择
- StringBuilder:用于构建反码后的二进制字符串,因为
StringBuilder在字符串拼接操作中比String更高效。
算法步骤
-
转换为二进制字符串:使用
Integer.toBinaryString(N)方法。 -
反码操作:遍历二进制字符串的每一位,使用条件运算符
? :进行反转。 -
转换回十进制:使用
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); } }#### 个人思考
-
效率问题:虽然当前的实现已经足够高效,但如果
N非常大,二进制字符串的长度也会非常长,可能会影响性能。可以考虑优化反码操作的实现方式。 -
边界情况:特别注意
N = 0的情况,其二进制反码为1,需要单独处理。 -
代码可读性:代码结构清晰,注释详细,便于理解和维护。
总结
通过这个题目,我学会了如何处理二进制数的反码操作,并且理解了如何在不同进制之间进行转换。同时,我也意识到在处理大数据时,性能优化是一个需要考虑的重要因素。