位运算,两种思路,LeetCode 1017. 负二进制转换

一、题目

1、题目描述

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

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

2、接口描述

python3
复制代码
python 复制代码
class Solution:
    def baseNeg2(self, n: int) -> str:
        
cpp
复制代码
cpp 复制代码
class Solution {
public:
    string baseNeg2(int n) {

    }
};

3、原题链接

1017. 负二进制转换


二、解题报告

1、思路分析

F1 二进制拆分

我们如果要用2进制位凑出n,那么从地位到高位进行枚举,能加入就加入

现在变成了-2 进制,对于偶数位没有影响,对于奇数位,(-2) ^ k = - (2 ^ k) = 2(k + 1) - 2 ^ k

那么对于奇数位,我们加上该位的同时令n加上 2 ^ (k + 1)即可

F2 进制转换

进制转换的通用方法:

加入余数,原数 -= 余数,原数除以 base

2、复杂度

时间复杂度: O(logn) 空间复杂度:O(1)

3、代码详解

F1 二进制拆分
python3
复制代码
python 复制代码
base = -2

class Solution:
    def baseNeg2(self, n: int) -> str:
        if not n:
            return "0"
        ret = []
        i = 0
        while n:
            ret.append(str(n & 1))
            if i & 1:
                n += 2 if n & 1 else 0
            n //= 2
            i += 1
        return "".join(ret[::-1])
        
cpp
cpp 复制代码
class Solution {
public:
    string baseNeg2(int n) {
        string ret;
        for(int i = 0; n; i ++){
            ret.push_back(abs(n & 1) ^ 48);
            if(i & 1) n += (n & 1) << 1; 
            n >>= 1;
        }
        reverse(ret.begin(), ret.end());
        return ret.size() ? ret : "0";
    }
};
F2 进制转换
复制代码
python3
复制代码
python 复制代码
base = -2

class Solution:
    def baseNeg2(self, n: int) -> str:
        if not n:
            return "0"
        ret = []
        while n:
            ret.append(str(n & 1))
            n = n // base + (1 if (n % base) < 0 else 0)
        return "".join(ret[::-1]) 
        
cpp
cpp 复制代码
class Solution {
public:
static constexpr int base = -2;
    string baseNeg2(int n) {
        string ret;
        while(n){
            ret.push_back(abs(n % base) ^ 48);
            n = n / base + ((n % base) < 0);
        }
        reverse(ret.begin(), ret.end());
        return ret.size() ? ret : "0";
    }
};
相关推荐
远瞻。14 分钟前
【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
论文阅读·算法
先做个垃圾出来………3 小时前
哈夫曼树(Huffman Tree)
数据结构·算法
phoenix@Capricornus5 小时前
反向传播算法——矩阵形式递推公式——ReLU传递函数
算法·机器学习·矩阵
Inverse1625 小时前
C语言_动态内存管理
c语言·数据结构·算法
数据与人工智能律师5 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
wuqingshun3141596 小时前
蓝桥杯 16. 外卖店优先级
c++·算法·职场和发展·蓝桥杯·深度优先
YouQian7726 小时前
2025春训第十九场
算法
CodeJourney.6 小时前
基于MATLAB的生物量数据拟合模型研究
人工智能·爬虫·算法·matlab·信息可视化
Epiphany.5566 小时前
素数筛(欧拉筛算法)
c++·算法·图论
爱吃涮毛肚的肥肥(暂时吃不了版)7 小时前
项目班——0510——JSON网络封装
c++·算法·json