【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
相关推荐
地平线开发者1 小时前
J6B vio scenario sample
算法
SelectDB7 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
BothSavage13 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn13 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
烬羽15 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
荣码15 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵1 天前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li1 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测