Skip to content

Latest commit

 

History

History
59 lines (49 loc) · 1.29 KB

File metadata and controls

59 lines (49 loc) · 1.29 KB

1017. Convert to Base -2

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".

Example 1:

Input: 2
Output: "110"
Explanation: (-2) ^ 2 + (-2) ^ 1 = 2

Example 2:

Input: 3
Output: "111"
Explanation: (-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3

Example 3:

Input: 4
Output: "100"
Explanation: (-2) ^ 2 = 4

Note:

  1. 0 <= N <= 10^9

Solutions (Rust)

1. Mathematical

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()
    }
}