You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

一行代码实现变量声明与循环:求解连续存在的最大二进制数

一行代码实现指定二进制检查函数

问题描述

给定一个字符串,完成以下操作:

  • 将每个字符转换为对应ASCII值,再转为8位二进制字符串(不足8位时在前面补0),把所有二进制字符串拼接成一个整体字符串。
  • 从数字0开始,将其转为二进制字符串,检查是否存在于拼接后的字符串中;若存在则数字加1继续检查,直到某个数字的二进制字符串不存在为止,返回最后一个存在的数字的十进制值。

示例:
输入字符串 = "0000010"

  • 0的二进制(0)存在 → 数字加1
  • 1的二进制(1)存在 → 数字加1
  • 10的二进制(10)存在 → 数字加1
  • 11的二进制(11)不存在 → 返回最后一个存在的数字对应的十进制值:2

原实现代码

def findLastBinary(s: str):
    string, n = ''.join(['0'*(10-len(bin(ord(char))))+bin(ord(char))[2:] for char in s]), 0
    while bin(n)[2:] in string: n+=1
    return n-1

一行化实现

可以借助itertools.count()生成无限递增的数字序列,结合生成器表达式找到第一个不存在的数字,最终返回该数字减1,同时把二进制拼接逻辑整合进去:

from itertools import count

findLastBinary = lambda s: next(n-1 for n in count() if bin(n)[2:] not in ''.join(f"{ord(c):08b}" for c in s))

如果不想引入额外库,也可以用一个足够大的范围模拟递增序列:

findLastBinary = lambda s: next(n-1 for n in range(10**6) if bin(n)[2:] not in ''.join(f"{ord(c):08b}" for c in s))

注:第二个版本的range(10**6)可根据输入字符串的实际长度调整,确保覆盖可能的检查范围。

测试用例验证

输入:s="Roses and thorns"
每个字符的ASCII转8位二进制拼接后(空格仅为可读性添加):
01010010 01101111 01110011 01100101 01110011 00100000 01100001 01101110 01100100 00100000 01110100 01101000 01101111 01110010 01101110 01110011
检查到数字31的二进制(11111)不存在,返回31-1=30,符合预期。

内容的提问来源于stack exchange,提问作者Jason Grace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:05:47