位运算,两种思路,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";
    }
};
相关推荐
昵称小白2 小时前
复杂度分析方法
算法
科研前沿2 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
学涯乐码堂主4 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa4 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073215 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
aini_lovee7 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99907 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5057 小时前
深入理解主成分分析(PCA)
算法
apollowing7 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F7 小时前
最小堆定时器
数据结构·算法