【python】获取所有长度为 k 的二进制字符串

python 复制代码
arr = [format(i, f'0{k}b') for i in range(2**k)]

先看最外层。

for i in range(2**k)

这一步在干嘛?

2**k 表示 2 的 k 次方,也就是所有长度为 k 的二进制数的总数。

例如 k = 3:

2^3 = 8

range(8) 会生成:

0,1,2,3,4,5,6,7

也就是所有 3 位二进制数对应的十进制整数。

接着看核心:format(i, f'0{k}b')

这是格式化函数。

b 表示:把整数转成二进制。

0{k} 表示:总宽度为 k,不够的左边补 0。

假设 k = 3:

format(1, '03b') -> '001'

format(2, '03b') -> '010'

format(7, '03b') -> '111'

f'0{k}b' 是什么?

这是 f-string 动态拼接。

如果 k = 3:

f'0{k}b' -> '03b'

所以整句话意思是:

把 i 转成长度为 k 的二进制字符串,不够就补 0。

举个完整例子:

k = 3

arr = [format(i, f'0{k}b') for i in range(2**k)]

结果是:

'000', '001', '010', '011', '100', '101', '110', '111'

转化为二进制还有一种写法:bin(i)[2:],但是不会对长度自动补零

(csp认证曾经考察过这部分)

python 复制代码
class Solution:
    def hasAllCodes(self, s: str, k: int) -> bool:
        seen = set()
        for i in range(len(s)-k+1):
            seen.add(s[i:i+k])
        if len(seen)==2**k:
            return True
        else:
            return False
相关推荐
iAkuya2 小时前
(leetcode)力扣100 76数据流的中位数(堆)
算法·leetcode·职场和发展
键盘鼓手苏苏2 小时前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
董董灿是个攻城狮2 小时前
AI 视觉连载5:传统 CV 之均值滤波
算法
多恩Stone2 小时前
【3D-AICG 系列-11】Trellis 2 的 Shape VAE 训练流程梳理
人工智能·pytorch·算法·3d·aigc
tuotali20262 小时前
氢气压缩机技术规范亲测案例分享
人工智能·python
嫂子的姐夫2 小时前
030-扣代码:湖北图书馆登录
爬虫·python·逆向
a1117763 小时前
EasyVtuber(或其衍生/增强版本)的虚拟主播(Vtuber)面部动画生成与直播解决方案
python·虚拟主播
lintax3 小时前
计算pi值-积分法
python·算法·计算π·积分法
小凯123453 小时前
pytest框架-详解(学习pytest框架这一篇就够了)
python·学习·pytest