
题目描述给你一个非负整数 nn按照下面的步骤操作输出最终的二进制字符串。操作步骤逐位转二进制最少位数把 nn 的每一位十进制数字分别转成二进制并且去掉前导 0。特殊地数字 0 转成字符串0。示例数字 5 →101数字 0 →0数字 9 →1001拼接二进制串按原数字从左到右的顺序把上一步的结果拼接成一个长二进制串 SS。示例数字 1 3 4 →1 11 100111100整体反转将 SS 反转得到 S′S′。示例111100→001111删除前导零删除 S′S′ 最前面的所有连续0得到 S′′S′′。如果 S′S′ 全是零则 S′′S′′ 为空串。示例001111→1111相邻去重非连续保留一个从左到右扫描 S′′S′′如果当前字符和前一个字符相同就删掉当前字符否则保留。示例1111→1110011→101输出结果Javaimport 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 i0; inumStr.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 i1; ibinaryB.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)); } } }Pythondef 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) # 如果全部是0lstrip后会是空字符串 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)