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"
.
Input: 2 Output: "110" Explanation: (-2) ^ 2 + (-2) ^ 1 = 2
Input: 3 Output: "111" Explanation: (-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3
Input: 4 Output: "100" Explanation: (-2) ^ 2 = 4
0 <= N <= 10^9
impl Solution {
pub fn base_neg2(n: i32) -> String {
if n == 0 {
return "0".to_string();
}
let mut n = n;
let mut ret = Vec::new();
while n != 0 {
let x = n % 4;
match x {
0 => ret.push("00"),
1 if n != 1 => ret.push("01"),
2 => ret.push("10"),
3 => ret.push("11"),
_ => ret.push("1"),
}
n = n / 4 + x / 2;
}
ret.reverse();
ret.concat()
}
}