news 2026/6/1 1:18:56

逐位二进制拼接 → 翻转 → 去头零 → 消邻重

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
逐位二进制拼接 → 翻转 → 去头零 → 消邻重

题目描述

给你一个非负整数 nn,按照下面的步骤操作,输出最终的二进制字符串。

操作步骤

  1. 逐位转二进制(最少位数)
    把 nn 的每一位十进制数字分别转成二进制,并且去掉前导 0
    特殊地,数字 0 转成字符串"0"
    示例:

    • 数字 5 →"101"

    • 数字 0 →"0"

    • 数字 9 →"1001"

  2. 拼接二进制串
    按原数字从左到右的顺序,把上一步的结果拼接成一个长二进制串 SS。
    示例:数字 1 3 4 →"1" + "11" + "100"="111100"

  3. 整体反转
    将 SS 反转,得到 S′S′。
    示例:"111100""001111"

  4. 删除前导零
    删除 S′S′ 最前面的所有连续'0',得到 S′′S′′。
    如果 S′S′ 全是零,则 S′′S′′ 为空串。
    示例:"001111""1111"

  5. 相邻去重(非连续保留一个)
    从左到右扫描 S′′S′′,如果当前字符和前一个字符相同,就删掉当前字符,否则保留。
    示例:

    • "1111""1"

    • "110011""101"

  6. 输出结果

Java

import java.util.*; class Solution { private String numToBinary (int digit) { if (digit == 0) { return "0"; } StringBuilder binary = new StringBuilder(); int num = digit; while (num > 0) { binary.insert(0, num % 2); num /= 2; } return binary.toString(); } public String processNum (int num) { if (num == 0) { return ""; } // 最少位二进制数表示 String numStr = String.valueOf(num); StringBuilder binaryA = new StringBuilder(); for (int i=0; i<numStr.length(); i++) { int digit = numStr.charAt(i) - '0'; binaryA.append(numToBinary(digit)); } // 翻转字符串并去除头部0 String reversedA = binaryA.reverse().toString(); int startindex = 0; while (startindex < reversedA.length() && reversedA.charAt(startindex) == '0') { startindex ++; } if (startindex == reversedA.length()) { return ""; } String binaryB = reversedA.substring(startindex); // 去除相邻重复 StringBuilder result = new StringBuilder(); result.append(binaryB.charAt(0)); for (int i=1; i<binaryB.length(); i++) { if (binaryB.charAt(i) != binaryB.charAt(i-1)) { result.append(binaryB.charAt(i)); } } return result.toString(); } } public class Main { public static void main(String[] args) { Solution solu = new Solution(); int[] nums = {34,156,981}; for (int num : nums) { System.out.println(num + " -> " + solu.processNum(num)); } } }

Python

def process_number(n: int) -> str: if n == 0: return "" # 步骤1: 将每一位十进制数字转换为最少位数的二进制表示 num_str = str(n) binary_parts = [] for ch in num_str: digit = int(ch) if digit == 0: binary_parts.append("0") else: # 转换为二进制并去掉前缀'0b' binary_parts.append(bin(digit)[2:]) # 步骤2: 拼接所有二进制串 concatenated = "".join(binary_parts) # 步骤3: 反转整个字符串 reversed_str = concatenated[::-1] # 步骤4: 去除前导零 # lstrip('0') 会删除字符串开头的所有'0' without_leading_zeros = reversed_str.lstrip('0') # 如果全部是0,lstrip后会是空字符串 if not without_leading_zeros: return "" # 步骤5: 去除相邻重复的数字 result = [] result.append(without_leading_zeros[0]) for i in range(1, len(without_leading_zeros)): if without_leading_zeros[i] != without_leading_zeros[i - 1]: result.append(without_leading_zeros[i]) return "".join(result)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 1:10:04

最新Python爬虫实战(多线程爬虫篇)——案例26:多线程爬取斗罗大陆3龙王传说小说批量保存到txt(附上完整爬虫代码)

【爬取目标】 目标网站:某小说网-斗罗大陆3龙王传说 在网络文学爱好者、小说收藏者以及斗罗大陆粉丝群体中,系统性地收集《斗罗大陆3龙王传说》全文是重要的阅读收藏需求。然而,如果需要获取前50个章节的完整内容,手动逐章打开并复制粘贴显然异常繁琐且耗时费力。因此,本…

作者头像 李华
网站建设 2026/6/1 1:02:01

ESP32 + SimpleFOC + 三路AS5600实现三轴FOC电机控制

使用一块ESP32&#xff08;具体型号&#xff1a;ESP32 LOLIN D32&#xff09;开发板&#xff0c;实现三个无刷电机的FOC闭环控制。由于AS5600磁编码器采用固定I2C地址&#xff0c;而ESP32硬件仅提供两路I2C接口&#xff0c;因此需要对SimpleFOC进行一定扩展。经过测试&#xff…

作者头像 李华
网站建设 2026/6/1 0:56:12

3步掌握AtlasOS:Windows系统优化实用指南

3步掌握AtlasOS&#xff1a;Windows系统优化实用指南 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas …

作者头像 李华
网站建设 2026/6/1 0:54:32

ctf show web入门58

这是一道远程代码执行漏洞&#xff0c;我们先查看源代码发现这里是使用POST方式传参给$c,再通过eval&#xff08;&#xff09;函数来执行输入的内容 我们可以打开hackbar来进行POST提交这里提示我们system&#xff08;&#xff09;函数被禁用了&#xff0c;我们尝试其他命令 我…

作者头像 李华
网站建设 2026/6/1 0:47:03

全景态势可视可控 动态跨镜接力驱动安防治理数字化升级技术解析方案

一、方案概述传统安防治理模式长期依赖碎片化视频监控、定点可视、事后回溯的运行逻辑&#xff0c;整体数字化程度偏低。各监控终端视域相互割裂、数据时序错位、感知维度单一&#xff0c;无法形成全域统一的态势认知体系。在人员车辆高频流动、多目标交织运行、场景遮挡盲区常…

作者头像 李华