题目描述
小C在学习二进制运算,他了解到每个非负整数都有其二进制表示。例如,整数 5 可以被表示为二进制 "101",整数 11 可以被表示为二进制 "1011",并且除了 N = 0 外,任何二进制表示中都不含前导零。
二进制的反码表示是将每个 1 变为 0,每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。现在小C想知道,给定一个十进制数 N,它的二进制反码对应的十进制数是多少。
测试样例
样例1
输入:N = 5
输出:2
样例2
输入:N = 10
输出:5
样例3
输入:N = 0
输出:1
思路
- 二进制表示:每个非负整数可以用二进制表示。例如,
5的二进制表示为101,10的二进制表示为1010。 - 反码表示:反码表示是将二进制数中的每个
1变为0,每个0变为1。例如,101的反码是010。 - 十进制转换:反码的二进制表示可以被转换回十进制数。
Java代码
public class Main {
public static int solution(int N) {
// write code here
// 将十进制数 N 转换为二进制字符串
String binaryString = Integer.toBinaryString(N);
StringBuilder binaryStringBuilder = new StringBuilder(binaryString);
// 生成反码
for (int i = 0; i < binaryStringBuilder.length(); i++) {
if (binaryStringBuilder.charAt(i) == '1') {
binaryStringBuilder.setCharAt(i, '0');
} else {
binaryStringBuilder.setCharAt(i, '1');
}
}
// 将反码的二进制字符串转换为十进制数
int result = Integer.parseInt(binaryStringBuilder.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);
}
}
复杂度分析
时间复杂度和空间复杂度均为O(n)。