【LeetCode】每日一题 - 负二进制转化

文章介绍了如何将给定的十进制整数转换成负二进制形式(base-2),确保结果字符串不包含前导零的详细步骤,包括取模、减一和逆序操作。

负二进制转换

给你一个整数 n ,以二进制字符串的形式返回该整数的 负二进制(base -2表示。

注意,除非字符串就是 "0",否则返回的字符串中不能含有前导零。

 

示例 1:

输入:n = 2
输出:"110"
解释:(-2)2 + (-2)1 = 2

示例 2:

输入:n = 3
输出:"111"
解释:(-2)2 + (-2)1 + (-2)0 = 3

示例 3:

输入:n = 4
输出:"100"
解释:(-2)2 = 4

 

提示:

  • 0 <= n <= 109

思路:将一个十进制的数 n 转化为任意 x 进制都可以使用这样的思路。

第一步:先得到转化为进制结果的最后一位 t :n % x (但如果得到的最后一位是负数的话,需要根据语言特性将其转化为正数),然后将最后一位添加到目标字符串中,然后将这个最后一位 t 在 n 中减去。

第二步:将这个十进制数按 x 进制的规则右移一位:n /= x,然后重复得到最后一位并添加的操作,最终可以得到一个字符串。

第三步:因为每次得到的都是理论上的最后一位,所以最后需要将字符串逆置,就得到了最终答案!

力扣代码:

class Solution {
public:
    string baseNeg2(int n) {
        if(n == 0) return "0";
        int x = -2;
        string s;
        while (n) 
        {
            if (n % x == 0) // 最后一位数是 0
                s += "0";
            else 
            {
                // 将最后一位减去, 因为 x 进制的最后一位在权重上和十进制是一样
                n -= 1;  
                s += "1";
            }
            n /= x; // 将 n 右移一位
        }
        reverse(s.begin(), s.end()); // 逆序字符串
        return s;
    }
};

 

 

评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值