2024.4.28力扣每日一题——负二进制转换

devtools/2024/10/24 11:15:46/

2024.4.28

      • 题目来源
      • 我的题解
        • 方法一 进制转换
        • 方法二 模拟进位

题目来源

力扣每日一题;题序:1017

我的题解

方法一 进制转换

对于以-2为基数的系统,可以这样理解:在-2进制中,每一位的权重是-2的幂。这与传统的二进制表示法不同,后者每一位的权重是2的幂。
要将一个正整数转换为以-2为基数的表示法,可以遵循以下步骤:

  • 初始化:创建一个空的字符串或列表来存储-2进制表示的每一位。
  • 迭代计算:从最高位开始,不断地将整数除以-2,记录每次操作的余数。
  • 反转结果:由于是从最高位开始计算的,最终得到的序列需要反转,以得到正常的-2进制表示。
  • 处理负数:由于除以负数时,除数和被除数的符号会相互影响,需要在每次除法后根据结果调整符号。

时间复杂度:O( log ⁡ − 2 n \log_{-2}n log2n)
空间复杂度:O(1)

java">public String baseNeg2(int n) {if (n == 0) {return "0";}StringBuilder negativeBinary = new StringBuilder();while (n != 0) {int remainder = n % -2;n = n / -2;// 如果余数是负数,转换为正数if (remainder < 0) {remainder += 2;n += 1;}negativeBinary.append(remainder);}return negativeBinary.reverse().toString();
}
方法二 模拟进位

官方题解
比较复杂,没怎么看懂,各位看官请移步官方题解。

时间复杂度:O©。C=32
空间复杂度:O©

java">public String baseNeg2(int n) {if (n == 0) {return "0";}int[] bits = new int[32];for (int i = 0; i < 32 && n != 0; i++) {if ((n & 1) != 0) {bits[i]++;if ((i & 1) != 0) {bits[i + 1]++;}}n >>= 1;}int carry = 0;for (int i = 0; i < 32; i++) {int val = carry + bits[i];bits[i] = val & 1;carry = (val - bits[i]) / (-2);}int pos = 31;StringBuilder res = new StringBuilder();while (pos >= 0 && bits[pos] == 0) {pos--;}while (pos >= 0) {res.append(bits[pos]);pos--;}return res.toString();
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~


http://www.ppmy.cn/devtools/23471.html

相关文章

【北京迅为】《iTOP龙芯2K1000开发指南》-第四部分 ubuntu开发环境搭建

龙芯2K1000处理器集成2个64位GS264处理器核&#xff0c;主频1GHz&#xff0c;以及各种系统IO接口&#xff0c;集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线&#…

【UE5】数字人基础

这里主要记录一下自己在实现数字人得过程中涉及导XSens惯性动捕&#xff0c;视频动捕&#xff0c;LiveLinkFace表捕&#xff0c;GRoom物理头发等。 一、导入骨骼网格体 骨骼网格体即模型要在模型雕刻阶段就要雕刻好表捕所需的表情体(blendshape)&#xff0c;后面表捕的效果直…

LLM学习之自然语言处理简单叙述

自然语言处理基础 自然语言处理&#xff1a;让计算机读懂人所写好的这些文本&#xff0c;能够像人一样进行交互。 自然语言处理的任务和应用 任务&#xff1a; 词性标注 part of speech tagging 动词&#xff0c;名词&#xff0c;形容词&#xff1f; 命名实体的识别 name…

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

keytool,openssl的使用

写在前面 在生成公钥私钥&#xff0c;配置https时经常需要用到keytool&#xff0c;openssl工具&#xff0c;本文就一起看下其是如何使用的。 keytool是jdk自带的工具&#xff0c;不需要额外下载&#xff0c;但openssl需要额外下载 。 1&#xff1a;使用keytool生成jks私钥文件…

安卓intent+传递Serializable接口

从Mainactivity1传递对象给MainActivity2可以通过Serializable对象。 <?xml version"1.0" encoding"utf-8"?> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.co…

HarmonyOS实战开发-如何在鸿蒙开发中使用数据库

鸿蒙中的数据库基于SQLite组件&#xff0c;用来处理关系比较复杂的数据&#xff0c;本文将以WORKER表为例&#xff0c;为大家演示在鸿蒙开发中对数据库的增删改查操作。 1、首先导入数据库模块&#xff1a; import relationalStore from ohos.data.relationalStore;2、配置数…

抖店订单量激增,把这些产品在平台上热卖,属于你的爆单要来了

大家好&#xff0c;我是电商花花。 这几天就要立夏了&#xff0c;天气逐渐转暖&#xff0c;夏季相关的产品已经迎来了季节性流量的爆发增长期&#xff0c;想要店铺出单就一定要做好这些准备&#xff0c;只要做好这些选品准备&#xff0c;抢到这些先机&#xff0c;就能快速做好…