位运算,两种思路,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";
    }
};
相关推荐
余额不足121383 分钟前
C语言基础十六:枚举、c语言中文件的读写操作
linux·c语言·算法
测试老哥7 分钟前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
火星机器人life2 小时前
基于ceres优化的3d激光雷达开源算法
算法·3d
虽千万人 吾往矣2 小时前
golang LeetCode 热题 100(动态规划)-更新中
算法·leetcode·动态规划
arnold663 小时前
华为OD E卷(100分)34-转盘寿司
算法·华为od
ZZTC4 小时前
Floyd算法及其扩展应用
算法
测试19984 小时前
外包干了2年,技术退步明显....
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
lshzdq4 小时前
【机器人】机械臂轨迹和转矩控制对比
人工智能·算法·机器人
2401_858286115 小时前
115.【C语言】数据结构之排序(希尔排序)
c语言·开发语言·数据结构·算法·排序算法
猫猫的小茶馆5 小时前
【数据结构】数据结构整体大纲
linux·数据结构·算法·ubuntu·嵌入式软件