LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】

  • 1017.负二进制转换
    • 方法一:模拟进制转换
    • 推广:任意进制转换

1017.负二进制转换

方法一:模拟进制转换

我们平常做进制转换最常用的方法就是辗转相除法,下面的图示分别给出了普通的10进制转2进制的过程,和10进制转 -2进制的过程
在这里插入图片描述

这里我们来推导一下右边的计算过程的合规性。
我们设 被除数为a,除数为b,余数为c
则有 a = (-2) * b + c,当余数c等于 -1 时,那么我们就不好表示了,我们就可以在这里变形:

a = (-2) * b + c
a - (-2) * b = c
a - (-2) * b + 2 = c + 2
a - (-2) * (b + 1) = c + 2

当c == -1时,我们可以加2,转换为1,然后将辗转相除得到的b的值加1,然后继续做辗转相除的运算操作。

class Solution {
    public String baseNeg2(int n) {
        if (n == 0 || n == 1) return String.valueOf(n);
        StringBuilder sb = new StringBuilder();
        while (n != 0) {
            int mod = n % (-2);
            n /= -2;
            if (mod == -1) {
                sb.append(1);
                n ++ ;
            } else {
                sb.append(mod);
            }
        }
        return sb.reverse().toString();
    }
}

推广:任意进制转换

依据上面的逻辑,这个解题逻辑是可以推广到任意进制的,我们设进制为k,则我们我们辗转相除的时候,如果余数小于0,则余数- k(此时k是负数),商 + 1即可。

class Solution {
    public String baseNeg2(int n) {
        if (n == 0) {
            return "0";
        }
        int k = -2;
        int x = n;
        StringBuilder sb = new StringBuilder();
        while (x != 0) {
            int mod = x % k;
            x /= k;
            if (mod < 0) {
                // 修正一下
                sb.append(mod - k);
                ++x;
            } else {
                sb.append(mod);
            } 
        }
        return sb.reverse().toString();
    }
}

时间复杂度:
O(logn)

空间复杂度:
O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/582963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pmp培训哪家好?高通过率的靠谱机构如何选择

PMP培训机构的选择本来就是一个需要有挑选的人才能顺利进行&#xff0c;所以如果你正好是PMP小白的话一定要抓紧补充一下自己在挑选机构方面的知识&#xff0c;理清自己的需求才能进行多维度的挑选&#xff0c;最后才能选择一个比较合适的机构。已经换证一次的老鸟路过&#xf…

Linux网络开发基础知识

一个网络服务器的简单实现 项目需求 实现回声服务器的客户端/服务器程序&#xff0c;客户端通过网络连接到服务器&#xff0c;并发送任意一串英文信息&#xff0c;服务器端接收信息后&#xff0c; 将每个字符转换为大写并回送给客户端显示。 eoch_client.c #include <arpa/i…

利用RunnerGo数据大屏强化测试管理与决策

测试平台中的数据大屏在提供实时监控、统计分析、效率提升、制定策略和促进沟通等方面具有重要的意义。它为测试团队提供更全面、更直观的数据支持&#xff0c;有助于提高测试质量和效率&#xff0c;减少风险&#xff0c;并加强团队协作和沟通。 数据大屏也是RunnerGo的核心特…

软考高级 | 系统架构设计师笔记(二)

三. 软件架构设计 3.1 概述 a 定义 软件或计算机系统的软件架构是该系统的一个&#xff08; 或多个&#xff09; 结构&#xff0c; 而结构由软件元素、 元 素的外部可见属性及它们之间的关系组成。 软件系统架构是关于软件系统的 结构、 行为和属性 的高级抽象。 指定…

【车辆管理】车辆位置监控管理方案

车辆位置监控管理方案 位置管理模块&#xff0c;实现管理车辆基于位置的管理功能。包括实时位置追踪、历史轨迹回放、电子围栏配置等功能。模块关键功能如下&#xff1a; 1、实时位置调度 应用公网的无线传输作为数据传输的载体&#xff0c;真正地实现对车辆位置的全天候实时…

OLED(SSD1306+I2C协议显示屏模块)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 简介 OLED&#xff08;Organic Light-Emitting Diode&#xff09;显示屏&#xff0c;即有机发光二极管显示屏&#xff0c;是一种新型显示技术。它的工作原理是通过电流驱动有机材料发光&#xff0c;无需背光灯&#x…

MyBatis 插件介绍及应用

MyBatis 插件介绍及应用 MyBatis 是一个持久层框架&#xff0c;它允许开发者自定义 SQL 语句并将其映射到 Java 对象中。MyBatis 提供了一种灵活的数据库操作方式&#xff0c;但随着项目的复杂度增加&#xff0c;一些通用功能如分页、缓存、事务管理等可能需要重复编写。为了解…

【网络原理】IP协议的地址管理和路由选择

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

uniapp-vue3-wechat:基于uniapp+vue3仿微信app聊天实例(H5+小程序+App端)

uni-vue3-wchat&#xff1a;基于uni-appvue3pinia2高仿微信app聊天模板。 原创基于最新跨端技术uni-appvue3.xpinia2vite4uv-ui构建三端仿微信app界面聊天实例。实现编辑框多行消息/emoj混合、长按触摸式仿微信语音面板、图片/视频预览、红包/朋友圈等功能。支持编译到H5小程序…

unity3d使用3D WebView播放网页中的视频

Unity2021.3.35f1&#xff0c;硬件ESP32-Cam&#xff0c;3D WebView插件 1.新建工程&#xff0c;导入3D WebView for Winfows和3D WebView for Android 2.打开场景Assets\Vuplex\WebView\Demos\Scenes\2_CanvasWebViewDemo 3.修改Canvas的Render Mode为Screen Space-Camera&am…

Spark持久化、broadcast广播变量和accumulator累加器

持久化操作 什么是持久化&#xff0c;为什么要持久化 Spark中最重要的功能之一是跨操作在内存中持久化&#xff08;或缓存&#xff09;数据集。当您持久化RDD时&#xff0c;每个节点将其计算的任何分区存储在内存中&#xff0c;并在该数据集&#xff08;或从该数据集派生的数…

AI大模型日报#0429:人大多模态Awaker1.0、清华「AI+材料」落地、微软小模型Orca-Math、GenAI黄金法则

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。AI大模型日报今日要点&#xff1a; 中山大学与重庆大学合作开发的基于Transformer的单细胞注释方法SANGO在跨样本、平台和组织…

平安城市 校园 景区 停车场网络语音对讲立柱SV-11TS

平安城市 校园 景区 停车场网络语音对讲立柱SV-11TS 长方形立柱式设计&#xff0c;外观简约&#xff0c;线条优美&#xff0c;工艺考究&#xff0c;坚固耐用可一键实现在紧急情况下求助报警、事件咨询&#xff0c;与SIP网络对讲主机进行全双工对讲。内置警示灯&#xff0c;呼叫…

接口自动化框架篇:使用python连接数据库 - PySQL介绍!

PySQL介绍&#xff1a;使用Python连接数据库的接口自动化框架 在接口自动化测试中&#xff0c;经常需要使用数据库来操作测试数据&#xff0c;验证接口返回的数据是否正确。Python是一种功能强大的编程语言&#xff0c;可以轻松地连接数据库&#xff0c;并进行各种数据库操作。…

保证接口幂等性(token机制)

现在继续讲一讲保证接口的幂等性——使用token机制&#xff0c;并编写代码实现&#xff01; 1. 概念 Token机制是实现接口幂等性的一种常见策略&#xff0c;尤其是在处理如订单创建、支付确认等敏感操作时&#xff0c;确保即使用户因网络延迟、误操作等原因重复提交请求&#…

【TDengine】mac m1解决no taos in java.library.path

前言 使用macos搭建springbootmybatisplus&#xff0c;通过mqtt将数据更新到tdenigne 3.2.3&#xff0c;数据源使用远程服务器的tdengine。 问题 启动时报错&#xff1a; Caused by: java.lang.UnsatisfiedLinkError: no taos in java.library.path 以下是官方文档 打开本…

动手学深度学习——矩阵

1. 基本概念 1.1 标量 标量由只有一个元素的张量表示。 所以标量计算与程度开发中的普通变量计算没有差异。 import torchx torch.tensor(3.0) y torch.tensor(2.0)x y, x * y, x / y, x**y(tensor(5.), tensor(6.), tensor(1.5000), tensor(9.))1.2 向量 向量泛化自标量…

Hbase学习笔记

Hbase是什么 HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。它利用Hadoop HDFS作为其文件存储系统,并提供实时的读写的数据库系统。HBase的设计思想来源于Google的BigTable论文,是Apache的Hadoop项目的子项目。它适合于存储大表数据,并可以达到实时级别。HB…

部署YUM仓库及NFS共享服务

YUN仓库服务 YUM概述 基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件包由YUM集中的软件仓库提供 yum软件仓库的常用类型 本地源仓库&#xff1a;baserulfile:// 在线源仓库&#xff1a;baserulhttp:// 或 https:// ftp源仓库&#xff1a;baserulftp:// RPM…

【Java那些事】关于前端收到后端返回的时间格式“2024-04-28T14:48:41“非想要的格式

问题&#xff1a; 后端操作后返回时间格式是"2024-04-28T14:48:41" 而我们想要的是&#xff1a;"2024-04-28 14:48:41", 两个解决方法&#xff1a; 方法一&#xff1a;使用 JsonFormat注解 Data AllArgsConstructor NoArgsConstructor public class Use…