Convert to Base -2

medium math base conversion negative base

Problem

Given a non-negative integer n, return a string representing its value in base -2 (negative two). The returned string never has leading zeros, except the string "0" itself. In base -2 the place values alternate sign: position 0 is 1, position 1 is -2, position 2 is 4, position 3 is -8, and so on.

Inputn = 6
Output"11010"
11010 in base -2 = 1·16 + 1·(-8) + 0·4 + 1·(-2) + 0·1 = 16 − 8 − 2 = 6.

def base_neg2(n):
    if n == 0:
        return "0"
    digits = []
    while n != 0:
        remainder = n & 1
        digits.append(str(remainder))
        n = -(n >> 1)
    return "".join(reversed(digits))
function baseNeg2(n) {
  if (n === 0) return "0";
  const digits = [];
  while (n !== 0) {
    const remainder = n & 1;
    digits.push(String(remainder));
    n = -(n >> 1);
  }
  return digits.reverse().join("");
}
class Solution {
    public String baseNeg2(int n) {
        if (n == 0) return "0";
        StringBuilder sb = new StringBuilder();
        while (n != 0) {
            int remainder = n & 1;
            sb.append(remainder);
            n = -(n >> 1);
        }
        return sb.reverse().toString();
    }
}
string baseNeg2(int n) {
    if (n == 0) return "0";
    string digits;
    while (n != 0) {
        int remainder = n & 1;
        digits += char('0' + remainder);
        n = -(n >> 1);
    }
    reverse(digits.begin(), digits.end());
    return digits;
}
Time: O(log n) Space: O(log n)