题目描述
Given a number N, return a string consisting of "0"s and "1"s that represents its value in base -2 (negative two).
The returned string must have no leading zeroes, unless the string is “0”.
Examples:
Input: 2
Output: “110”
Explantion: (-2) ^ 2 + (-2) ^ 1 = 2
Input: 3
Output: “111”
Explantion: (-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3
Input: 4
Output: “100”
Explantion: (-2) ^ 2 = 4
Note:
0 <= N <= 10^9
Code
1.
class Solution {
public String baseNeg2(int N) {
String res = "";
while(N != 0){
res = Integer.toString(N&1) + res;
N = -(N >> 1);//负数的二进制是补码。-1左移1位还是-1,再取反,得1
}
return res == "" ? "0" : res;
}
}
2.递归方法
public String baseNeg2(int N) {
if (N == 0 || N == 1) return Integer.toString(N);
return baseNeg2(-(N >> 1)) + Integer.toString(N & 1);
}
3.更通用的方法
class Solution {
public String baseNeg2(int N) {
String res = "";
int base = -2;
while(N != 0){
int remainder = N % base;
N = N / base;
if(remainder < 0){
//余数为负,说明商乘以base后的值比被除数大,此时应该将商加1,使乘积小于被除数,如此余数大于0
remainder += Math.abs(base);
++N;
}
res = Integer.toString(remainder) + res;
}
return res == ""?"0":res;
}
}