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

这篇具有很好参考价值的文章主要介绍了【LeetCode】每日一题 - 负二进制转化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

负二进制转换

给你一个整数 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,然后重复得到最后一位并添加的操作,最终可以得到一个字符串。

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

力扣代码:文章来源地址https://www.toymoban.com/news/detail-861796.html

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;
    }
};

到了这里,关于【LeetCode】每日一题 - 负二进制转化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-06-14 LeetCode每日一题(二进制字符串前缀一致的次数)

    点击跳转到题目位置 给你一个长度为 n 、下标从 1 开始的二进制字符串,所有位最开始都是 0 。我们会按步翻转该二进制字符串的所有位(即,将 0 变为 1)。 给你一个下标从 1 开始的整数数组 flips ,其中 flips[i] 表示对应下标 i 的位将会在第 i 步翻转。 二进制字符串 前缀

    2024年02月08日
    浏览(54)
  • 【每日一题】1253. 重构 2 行二进制矩阵

    给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。 第 0 行的元素之和为 upper。 第 1 行的元素之和为 lower。 第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。 你需要利用 upper,lower 和 colsu

    2024年02月12日
    浏览(46)
  • C语言每日一题之整数求二进制1的个数

    今天分享一道题目,用三种方法来求解 二进制1的个数 方法1 我们的十进制除10和取余数就可以得到我们每一位的数字,那我们的二进制也可 以 这是一种方法,另外一种就是我们可以用移位操作符来算 这个方法是不是也是特别妙呢,当然还有更妙的方法,请看!!! 相信看

    2024年02月15日
    浏览(62)
  • C语言每日一题(5):求两个数二进制中不同位的个数

    文章主题:求两个数二进制中不同位的个数🔥 所属专栏: C语言每日一题 📗 作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想😄🎶 个人主页: [₽]的个人主页 🏄🌊 最近刚学位操作符以及二进制码的相关知识,于是想出了求两个数二进制中不同

    2024年02月07日
    浏览(152)
  • 【LeetCode】67. 二进制求和

    难度:简单 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 示例 2: 提示: 1 = a.length, b.length = 10^4 a 和 b 仅由字符 \\\'0\\\' 或 \\\'1\\\' 组成 字符串如果不是 \\\"0\\\" ,就不含前导零 思路: 从后往前遍历字符逐个判断即可 最后考虑是否进位 sum 1 等价于 sum

    2024年02月05日
    浏览(52)
  • leetcode-颠倒二进制位

    190. 颠倒二进制位 题解: 我们可以使用位运算来解决这个问题。具体步骤如下: 初始化一个变量res为0,用于存储颠倒后的二进制位。 循环32次,每次将n的最低位取出,并将其添加到res的最高位上。 将n右移一位,将res左移一位。 返回res作为最终结果。

    2024年01月25日
    浏览(78)
  • Leetcode67 二进制求和

    给你两个二进制字符串  a  和  b  ,以二进制字符串的形式返回它们的和。      代码  

    2024年02月11日
    浏览(41)
  • 【每日一题Day218】LC1091 二进制矩阵中的最短路径 | BFS

    你驾驶出租车行驶在一条有 n 个地点的路上。这 n 个地点从近到远编号为 1 到 n ,你想要从 1 开到 n ,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。 乘客信息用一个下标从 0 开始的二维数组 rides 表示,其中 rides[i] = [starti, endi, tipi] 表示第 i 位乘客

    2024年02月08日
    浏览(53)
  • leetcode: 2861. 最大二进制奇数

    给你一个 二进制 字符串  s  ,其中至少包含一个  \\\'1\\\'  。 你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。 注意 返回的结果字符串 可以 含

    2024年03月13日
    浏览(54)
  • 代码训练LeetCode(12)二进制求和

    Author: Once Day Date: 2024年3月14日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 67. 二进制求和 - 力扣(LeetCode) 力扣 (LeetCode) 全球极

    2024年03月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包