位运算,两种思路,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";
    }
};
相关推荐
类球状17 分钟前
顺序表 —— OJ题
算法
Miraitowa_cheems41 分钟前
LeetCode算法日记 - Day 11: 寻找峰值、山脉数组的峰顶索引
java·算法·leetcode
CoovallyAIHub1 小时前
方案 | 动车底部零部件检测实时流水线检测算法改进
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
方案 | 光伏清洁机器人系统详细技术实施方案
深度学习·算法·计算机视觉
lxmyzzs1 小时前
【图像算法 - 14】精准识别路面墙体裂缝:基于YOLO12与OpenCV的实例分割智能检测实战(附完整代码)
人工智能·opencv·算法·计算机视觉·裂缝检测·yolo12
洋曼巴-young1 小时前
240. 搜索二维矩阵 II
数据结构·算法·矩阵
楼田莉子2 小时前
C++算法题目分享:二叉搜索树相关的习题
数据结构·c++·学习·算法·leetcode·面试
pusue_the_sun3 小时前
数据结构——栈和队列oj练习
c语言·数据结构·算法··队列
大锦终3 小时前
【算法】模拟专题
c++·算法
Xの哲學4 小时前
Perf使用详解
linux·网络·网络协议·算法·架构