LeetCode
负二进制转换
题目链接:1017. 负二进制转换 - 力扣(LeetCode)
题目描述
给你一个整数 n
,以二进制字符串的形式返回该整数的 负二进制(base -2
) 表示。
注意, 除非字符串就是 "0"
,否则返回的字符串中不能含有前导零。
示例 1:
输入:n = 2
输出:"110"
解释:(-2)2 + (-2)1 = 2
示例 2:
输入:n = 3
输出:"111"
解释:(-2)2 + (-2)1 + (-2)0 = 3
示例 3:
输入:n = 4
输出:"100"
解释:(-2)2 = 4
提示:
0 <= n <= 109
思路
代码
C++
class Solution {
public:
string baseNeg2(int n) {
if(n == 0)return "0"; // 0直接返回
string res = "";
// 类似十进制转二进制的方法,只是余数如果为负数需要修正
while(n != 0){
int mod = n % (-2);
n = n / (-2);
if(mod == -1){
// 修正余数为-1->1,对应商也要加1
n++;
mod = 1;
}
res = to_string(mod) + res; // 倒序生成二进制
}
return res;
}
};
Java
class Solution {
public String baseNeg2(int n) {
if(n == 0) return "0";
StringBuilder res = new StringBuilder();
while(n != 0){
int mod = n % (-2);
n = n / (-2);
if(mod == - 1){
n++;
mod = 1;
}
res.append(mod);
}
return res.reverse().toString();
}
}