当前位置: 首页 > news >正文

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

题目描述

给你一个非负整数 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)
http://www.jsqmd.com/news/926159/

相关文章:

  • 汽车行业:从4S店到充电桩,电子合同正在重构汽车服务签约体验
  • AE510 Smart Kit:边缘 AI 视觉套件,让传统售货机迈入智能结算时代
  • 别再傻傻分不清了!用OpenCV+Python实战搞懂单应矩阵、本质矩阵和基础矩阵
  • OpCore Simplify:终极黑苹果配置工具,3步完成复杂EFI配置
  • 用Python和R实战检验皮尔逊相关性五大假设(附完整代码与可视化)
  • 2026年南京五粮液回收服务商评测:四家机构实力对比 - 优质品牌商家
  • 云主机(华为)改密码的流水账
  • K-means实战避坑指南:如何用肘部法则和轮廓系数找到最佳K值(附Python代码)
  • 接收端电路
  • yolov26改进 | 添加注意力机制篇 | 添加DAttention (DAT)注意力机制二次创新C2PSA(附独家网络结构图)
  • 基于PLC两电梯协同运力控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码
  • 容器之间ros2可发现topic没有数据
  • 3分钟完成GTNH中文汉化:新手完整安装指南
  • 小学期第三周
  • 第一篇:uniapp+Django 互动功能全流程(登录缓存→点赞 / 收藏 / 评论列表显示)
  • HTML5 新特性概览:探索现代 Web 的强大能力
  • 从手动混乱到智能有序:Irony Mod Manager如何让Paradox游戏模组管理效率提升3倍?
  • 给你的 Agent 上一场“砍价考试“:用 Cattle Trade 思路搭一个最小博弈测评
  • VoxCPM 语音模型新手部署与调用全指南
  • Django+Vue智慧农业管理系统源码+论文
  • QGIS新手避坑指南:从高德路网数据到空间分析的全流程实操
  • 云成本治理框架:优化云计算成本
  • 别再当‘黑盒’模型受害者了!用Python的shap库5分钟看懂你的XGBoost模型决策
  • AI自进化的可能与形态:一种结构工程的推演
  • 2026年国产质量流量计TOP5排行 核心参数实测对比 - 优质品牌商家
  • 避坑指南:高通SA8255P平台Nor Flash烧录全流程与‘先擦后写’的血泪教训
  • Masa Mods中文汉化包:为你的Minecraft 1.21模组体验注入母语力量!
  • 剧本逻辑断层?角色扁平?对话生硬?,Gemini剧本辅助系统5大诊断模块+实时修复建议全披露
  • 2026年苏州本地防水补漏行业三家合规经营服务机构信息梳理分析 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 2026年5月地热网片选购指南:实体厂家综合实力与选型要点解析 - 2026年企业资讯