从零学算法1017

1017. 负二进制转换
给你一个整数 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

  • 我的原始人解法:最朴素的思路。
    1. 确定至少需要用几位表示 n ,并且得到这几位能表示的最大值 sum。根据定义会发现,由于 -2 的奇数次只会对最大值产生负影响,所以比如 3 位负二进制数和 4 位负二进制数的最大值其实都为 101(-22 + -20) 和 0101(-22 + -20)。
    2. 用负二进制先表示出来,最大值当然是把会得到负数的每一位取 0,其他位取 1,比如 101,10101。
    3. 我们在最大值的基础上减到等于 n,rest = sum - n 就是我们需要在步骤 2 的基础上减去的数,比如 rest = 7,我们总共需要减少 7。
      1. 先得到小于 7 的最大的 2x,即 4,我们需要先减去 4。(减去一个数就相当于把原本 4 对应的那一位取反即可,比如 101 要减 4 -> 001,101 要减 2 -> 111。)
      2. 减了 4 以后,还剩 3 没减,还是同理,先减 2,最后减 1。
  •   public String baseNeg2(int n) {int i = 0;int sum = 1;while(sum < n){i += 2;sum += Math.pow(2, i);}StringBuilder sb = new StringBuilder();while(i >= 0){if(i-- % 2 == 0)sb.append("1");else sb.append("0");}int rest = sum - n;while(rest > 0){int x = getDigit(rest);char c = sb.charAt(sb.length() - 1 - x);String newC = c == '1'? "0" : "1";sb.replace(sb.length() - 1 - x, sb.length() - x, newC);rest -= Math.pow(2, x);}return sb.toString();}// 得到小于 n 的最大的 2 的 x 次对应的那一位public int getDigit(int n){int sum = 0;int i = 0;while(sum < n){sum += Math.pow(2, i++);}return i - 1;}
    
  • 他人题解:看了很多篇题解,个人认为最本质的还是这个。
  • 首先 10 进制转 k 进制,原理都为不断取余,我们顺着这一点解决。
  • 当 k 为正数时,我们很容易写出模版,不断取余,拼接余数,然后 n 整除 k
  • 	if(n == 0)return "0";int k = 2;StringBuilder sb = new StringBuilder();while(n != 0){int r = n % k;sb.append(r);n = n / k;}return sb.reverse().toString();
    
  • 但是当 k 为负数时,余数可能出现负数,那肯定有问题了,比如将十进制的 19 转为 -9 进制,我们会得到如下
    • 19 ÷ −9 = −2 余 1
    • -2 ÷ −9 = 0 余 -2
  • 这里正确的步骤其实应该确保余数大于等于 0,即:
    • 19 ÷ −9 = −2 余 1
    • -2 ÷ −9 = 1 余 7 (-9 * 1 + 7 = -2 -> 7 = -2 + 9)
    • 1 ÷ -9 = 0 余 1
  • 根据第二步的 7 = -2 + 9 所以为了保证余数大于 0,余数应该为 n % k + abs(k),但这是余数为负数的情况;考虑到余数为正数时这样一加结果都大于 k 了,我们最终还是得对 abs(k) 取余,这样当余数为负数时,n % k + abs(k)abs(k) 取余还是 n % k + abs(k);当余数为正数时 (n % k + abs(k)) % abs(k) 其实就还等于 n % k
  • 同理,整除后的结果也需要处理,即 -2 ÷ −9 = 1 余 7 的 1 是怎么来的,我们换位得到 1 = (-2 - 7) ÷ -9,即 (n - r)/k,由于 r 本来就是 n / k 之后的余数,所以 (n - r) / k 等于 n / k
  •   public String baseNeg2(int n) {if(n == 0)return "0";int k = -2;StringBuilder sb = new StringBuilder();while(n != 0){int r = n % k;r = (r + Math.abs(k)) % Math.abs(k);sb.append(r);n = (n - r) / k;}return sb.reverse().toString();}
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORAN每个端点和每个C平面消息的限制

O-RU每个端点的处理限制 当O-RU的处理粒度是基于端点的&#xff0c;即&#xff0c;在O-RU中处理C/U平面消息的处理资源被分配给每个端点时&#xff0c;O-RU可以对每个端点施加特定限制&#xff0c;例如&#xff0c;endpoint-section-capacity、endpoint-beam-capacity、endpoi…

ctfshow web78 获取flag

第一种&#xff1a;利用input伪协议 ,获取到flag 第二种&#xff1a;利用flter协议,获取到flag https://21d9e58a-c0fd-47ea-a9c4-d875100f2fdb.challenge.ctf.show/?filephp://filter/readconvert.base64-encode/resourceflag.php 得到的结果PD9waHANCg0KLyoNCiMgLSotIGNvZG…

代码随想录算法训练营第12天:滑动窗口和前缀和

代码随想录算法训练营第12天&#xff1a;滑动窗口和前缀和 这里我参考了西法的博客&#xff0c; 467. 环绕字符串中唯一的子字符串(中等)795. 区间子数组个数(中等)904. 水果成篮(中等)992. K 个不同整数的子数组&#xff08;困难&#xff09;1109. 航班预订统计(中等) 前四…

C++ map自定义比较函数遵守严格弱序

问题背景及定位 背景&#xff1a;这个问题是在将tablesaw&#xff08;一个Java的数据处理项目&#xff09;迁移到C时出现的。 问题位置&#xff1a;SplitOn()函数&#xff0c;在数据流水线中的aggregate阶段。 问题描述&#xff1a;使用google/benchmark进行了批量化的性能测…

机器学习周报第36周 AT-LSTM

文章目录 week36 AT-LSTM摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 注意力机制概述3.3 AT-LSTM3.4 数据预处理 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 训练参数4.3.2 数据集4.3.3 实验设置4.3.4 实验结果 5. 基于pytorch的transfor…

asp.net表单上传文件

asp.net表单上传文件 可以用自己的主机搭建服务器环境测试 1.借鉴文章&#xff1a; 原文链接&#xff1a;http://www.cnblogs.com/gxwang/p/4883902.html 2.html端示例代码&#xff0c; 文件名为index.aspx <% Page Language"C#" AutoEventWireup"true…

IDEA那些牛X的插件

activate-power-mode&#xff1a;代码震动效果 Easy JavaDoc&#xff1a;帮你写注释 EASY Code&#xff1a;帮你生成mapper之类的代码 Generate O2O&#xff1a;帮你生成两个类之间复制的代码 GitToolBox&#xff1a;Git工具 IDE Eval Reset&#xff1a;懂得都懂 Java Be…

使用Cesium ion将 Sketchfab 3D 模型添加到您的GIS应用中

您现在可以将 Sketchfab 中的 3D 模型导入 Cesium ion 中以创建 3D 块&#xff0c;从而更轻松地为地理空间体验创建上下文和内容。 Sketchfab 是 Epic Games 的一部分&#xff0c;也是使用最广泛的 3D 资产市场之一。自 2012 年推出以来&#xff0c;已有超过 1000 万用户使用 …

【数据结构】最小生成树(Prim算法、Kruskal算法)解析+完整代码

5.1 最小生成树 定义 对一个带权连通无向图 G ( V , E ) G(V,E) G(V,E)&#xff0c;生成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。 设R为G的所有生成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称…

3. uniapp开发工具的一些事

前言 新的一天&#xff0c;又要开始卷起来了&#xff0c;开发程序开发当前离不开开发工具&#xff0c;一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间&#xff1a;约5&#xff5e;7分钟&#xff1b; 本文重点&am…

ssh基本功能

SSH&#xff08;Secure Shell&#xff09;是一种安全协议&#xff0c;用于在不安全的网络中为网络服务提供安全的传输。SSH利用公钥加密技术为远程登录会话和其他网络服务提供安全性的协议。可以有效防止远程管理过程中的信息泄露问题。 SSH的主要功能有&#xff1a; 远程登录…

Visual Studio Code基础:打开一个编辑器(文件)时,覆盖了原编辑器

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 在使用vscode时&#xff0c;偶尔会出现这样的问题&#xff1a;打开了某个编辑器&#xff08;文件&#xff0c;下面统称文件&#xff09;后&#xff0c;再打开其他文件…

清理Mac电脑中的垃圾文件,让Mac电脑像新的一样好

CleanMyMac是一款流行的Mac系统优化工具&#xff0c;它可以帮助用户清理Mac电脑中的垃圾文件、优化系统性能、管理应用程序、保护隐私和提升电脑运行速度。下面是CleanMyMac的一些主要功能&#xff1a; 系统清理&#xff1a;清除系统缓存、日志文件、语言文件等&#xff0c;释放…

Hotcoin Academy 市场洞察-2024年4月15日-21日

加密货币市场表现 BTC ETF在本周出现净流出&#xff0c;大盘有较大跌幅&#xff0c;BTC一度跌破60000美金&#xff0c;ETH一度跌破2800美金&#xff0c;整体以横盘为主&#xff0c;行情在周末有略微回升趋势。BTC市占率创21年4月来新高&#xff0c;目前市值1.28万亿&#xff0c…

华为OD机试-螺旋数字矩阵

题目描述与示例 题目描述 疫情期间&#xff0c;小明隔离在家&#xff0c;百无聊赖&#xff0c;在纸上写数字玩。 他发明了一种写法&#xff1a;给出数字个数n和行数m (0 < n < 999&#xff0c;0 < m < 999)&#xff0c;从左上角的1开始&#xff0c;按照顺时针螺旋…

使用拼音代替中文做nlp之拼音文本互转

好处 使用拼音代替中文进行NLP&#xff08;自然语言处理&#xff09;任务的拼音文本互转有以下好处&#xff1a; 减小词汇空间&#xff1a;中文词汇庞大&#xff0c;使用拼音代替可以将词汇空间减小到拼音字符的数量级&#xff0c;简化了问题规模。 简化算法&#xff1a;使用…

golang sync pool

sync.Pool是内置对象池技术&#xff0c;可用于缓存临时对象&#xff0c;避免因频繁建立临时对象所带来的消耗以及对GC造成的压力 在很多知名框架中都可以看到sync.Pool的大量使用。比如Gin中用sync.Pool来复用每个请求都会创建的gin.Context对象 但是值得注意的是sync.Pool缓…

图片浏览工具-Honeyview

一、软件特点 轻量而快速 可以显示包括 GPS 信息在内的 JPEG 格式的 EXIF 信息 对图像格式进行批量转换和调整大小 支持显示 GIF 和 WebP 动图 无需解压即可直接查看压缩包中的图像 二、支持的格式 图像格式: BMP, JPG, GIF, PNG, PSD, DDS, JXR, WebP, J2K, JP2, TGA, TIFF, …

基于Pytorch的LSTM网络全流程实验(自带数据集,可直接运行出结果,替换自己的数据集即可使用)

文章目录 LSTM代码双向LSTM&#xff0c;需要修改哪几个参数&#xff1f; LSTM代码 import numpy as np import matplotlib.pyplot as pltimport torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torch.utils.data import Data…

沉浸式翻译 chrome 插件 Immersive Translate - Translate Website PDF

免费翻译网站&#xff0c;翻译PDF和Epub电子书&#xff0c;双语翻译视频字幕 &#x1f4e3; 网络上口碑爆炸的网站翻译扩展工具【沉浸式翻译】⭐⭐⭐⭐⭐ &#x1f4bb; 功能特点如下&#xff1a; &#x1f4f0; 网站翻译 &#x1f680; 提供双语网站翻译&#xff0c;智能识…