当前位置: 首页 > 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.rkmt.cn/news/1437489.html

相关文章:

  • 用Python和R实战检验皮尔逊相关性五大假设(附完整代码与可视化)
  • K-means实战避坑指南:如何用肘部法则和轮廓系数找到最佳K值(附Python代码)
  • HTML5 新特性概览:探索现代 Web 的强大能力
  • 从手动混乱到智能有序:Irony Mod Manager如何让Paradox游戏模组管理效率提升3倍?
  • VoxCPM 语音模型新手部署与调用全指南
  • QGIS新手避坑指南:从高德路网数据到空间分析的全流程实操
  • Django+Vue智慧农业管理系统源码+论文
  • 别再当‘黑盒’模型受害者了!用Python的shap库5分钟看懂你的XGBoost模型决策
  • 2026年国产质量流量计TOP5排行 核心参数实测对比 - 优质品牌商家
  • C51代码银行空间保留技术详解与实践
  • 2026年当下,河北铁艺护栏实力厂家如何实现高性价比? - 2026年企业资讯
  • 【Gemini印度语言工程白皮书】:从Devanagari脚本识别到低资源方言微调的5层技术栈
  • 2026年推荐网站设计实力公司,哪家性价比高? - myqiye
  • 2026年高评价硅酮胶实测评测:广东胶粘剂oem厂家/广东食品级硅酮胶/广东高温硅酮胶/性能与场景适配对比 - 优质品牌商家
  • 从生物学视角解析智能本质:AI与人类认知的鸿沟
  • 【统计法规】3.6服务人民原则 ★ ★ ★
  • 酒店业AI应用实战:从数据驱动到超个性化体验的十大场景解析
  • 量子增强ISAC系统:6G感知与通信融合新范式
  • 2026年04月工业硅酮胶热门品牌推荐 - 优质品牌商家
  • 从CNN到LSTM:拆解吴恩达《深度学习》中最实用的工程化技巧(附代码片段)
  • 2026年石家庄名酒回收权威渠道解析:石家庄石家庄老酒回收/石家庄石家庄茅台酒回收/石家庄茅台酒上门回收/石家庄茅台酒回收电话/选择指南 - 优质品牌商家
  • 饰面型防火涂料选购指南,欧拓安防的特点 - mypinpai
  • ????赠与读者?第一部分——内容介绍基于自适应虚拟谐波阻抗的光储VSG并网电流谐波抑制模型研究摘要高比例光伏、储能等分布式新能源的规模化并网,使得电力电子变流设备大量接
  • Gemini股东大会材料深度解密:7项关键决议背后的资本博弈与技术路线图调整
  • 系统设计原则:构建可扩展、高可用系统的基石
  • 揭秘AI时代捐赠转化率暴跌真相:Gemini捐赠活动策划的3个致命盲区及72小时优化方案
  • 深入紫光PGL22G的DDR3控制器:从AXI4接口到实际读写测试的完整流程解析
  • 2026年Q2上海名酒回收服务商评测:上海老酒回收/上海茅台酒上门回收/上海茅台酒回收电话/上海附近上门回收名酒/选择指南 - 优质品牌商家
  • 为什么92%的Gemini捐赠活动未激活LLM原生能力?顶级基金会CTO首曝内部策划白皮书(限200份)
  • 沃飞激光500W激光清洗机的品牌怎么样 - mypinpai