【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
相关推荐
强哥聊算力4 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
IT_Octopus7 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_965148117 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
Navigator_Z8 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy8 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
Cc.Y9 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
拿本唠嗑AI研究9 小时前
本体工程实战指南:从建模到可维护的完整落地路径
java·人工智能·python·jena·ontology
Smoothcloud润云10 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu
YangYang9YangYan10 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl210 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法