0
点赞
收藏
分享

微信扫一扫

【LEETCODE】1017. 负二进制转换

jjt二向箔 2023-04-06 阅读 38

模拟

我们可以判断 n 从低位到高位的每一位,如果该位为 1,那么答案的该位为 1,否则为 0。如果该位为 1,那么我们需要将 n 减去 k。接下来我们更新 n = ⌊n/2⌋, k = -k。继续判断下一位。最后,我们将答案反转后返回即可。

class Solution {
    public String baseNeg2(int n) {
        if (n == 0) {
            return "0";
        }
        int[] bits = new int[32];
        for (int i = 0; i < 32 && n != 0; i++) {
            if ((n & 1) != 0) {
                bits[i]++;
                if ((i & 1) != 0) {
                    bits[i + 1]++;
                }
            }
            n >>= 1;
        }
        int carry = 0;
        for (int i = 0; i < 32; i++) {
            int val = carry + bits[i];
            bits[i] = val & 1;
            carry = (val - bits[i]) / (-2);
        }
        int pos = 31;
        StringBuilder res = new StringBuilder();
        while (pos >= 0 && bits[pos] == 0) {
            pos--;
        }
        while (pos >= 0) {
            res.append(bits[pos]);
            pos--;
        }
        return res.toString();
    }
}

举报

相关推荐

0 条评论