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

server/2024/9/25 7:39:01/

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/server/23294.html

相关文章

OSPF的LSA详解

一、什么是LSA&#xff1f;LSA作用&#xff1f; 在OSPF协议中&#xff0c;LSA全称链路状态通告&#xff0c;主要由LSA头部信息&#xff08;LSA摘要&#xff09;和链路状态组成。部分LSA只有LSA头部信息&#xff0c;无链路状态信息。使用LSA来传递路由信息和拓扑信息&#xff0c…

企业级DDoS防护与内网文件安全防护:全方位策略与技术实践

在数字化转型的浪潮中&#xff0c;企业面临着日益严峻的网络安全威胁&#xff0c;其中DDoS&#xff08;分布式拒绝服务&#xff09;攻击与内网文件防护是两个至关重要的议题。本文将深入探讨企业如何通过综合运用多种技术和策略&#xff0c;构建起强大的DDoS防护体系与内网文件…

tmux使用教程

一 基础 和枯燥的终端说再见吧 → 终端复用工具 Tmux - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/58668651 1 操作 1.1 进入tmux 终端输入 tmux 1.2 分屏 默认的prefix是ctrl b键&#xff0c;也就是如果相对tmux进行任何操作&#xff0c;都要先输入ctrl b,再输入指…

解决Blender导出FBX文件到Unity坐标轴错误的问题

发现Blender的模型导入到Unity里面有问题,简单研究了下发现是坐标系不同,Unity使用的是左手坐标系,Blender使用的是右手坐标系 。 下面直接将如何解决 首先忽略Blender的右手坐标系以及Z轴朝上的事&#xff0c;依照unity坐标系情况修改模型物体的旋转&#xff0c;以Blender猴…

亲子公园实景剧本杀小程序系统开发

亲子公园实景剧本杀小程序系统开发涉及到多个方面的内容&#xff0c;具体步骤如下&#xff1a; 1. 系统需求分析&#xff1a;了解客户的需求和期望&#xff0c;明确开发目标和功能需求。 2. 系统架构设计&#xff1a;根据需求分析结果&#xff0c;设计系统的整体架构&#xf…

智能数据分析平台待修复BUG以及待完成需求

快速跳转&#xff1a;何耳林毕设项目介绍-CSDN博客 BUG 1.个人图标页搜索功能&#xff0c;不能进行搜索 2.用户管理功能头部搜索栏有多余搜索项 3.修改用户权限等信息会影响当前管理用户 待完成需求 1.新增AI问答功能 2.图标页自动刷新功能

vue中配置 测试、准生产、生产环境

在package.json,scripts中配置 "dev": "vue-cli-service serve --open --mode dev",在项目根目录下配置 新建 .env.dev 和.env.development文件 //类似于title NODE_ENV "serve" //各环境API数据接口请求地址 VUE_APP_BASE_API "http:…

C#中的扩展方法

C#中的扩展方法是一种非常实用的语言特性&#xff0c;它允许我们在不修改原有类定义的情况下&#xff0c;为其添加新的方法。这种机制极大地增强了代码的灵活性和可维护性&#xff0c;特别是在处理第三方库或无法直接修改源码的类时尤为有用。下面&#xff0c;我将详细阐述C#扩…