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,对应商也要加1n++; 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();}
}