【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
相关推荐
aqi001 分钟前
15天学会AI应用开发(十六)LangChain实现对话记忆功能
人工智能·python·大模型·ai编程·ai应用
未来之窗软件服务1 分钟前
计算机考试-快速排序—东方仙盟
数据结构·算法·排序算法·仙盟创梦ide·东方仙盟
卷无止境7 分钟前
Python的collections模块:那些被低估的"瑞士军刀"
后端·python
卷无止境12 分钟前
Python的方法解析顺序:一场关于继承顺序的精妙设计
后端·python
小龙报14 分钟前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
小柯南敲键盘34 分钟前
跨马翻译:批量图片与视频字幕翻译,支持智能抠图
大数据·人工智能·python·音视频
txzrxz1 小时前
数论:排列数、组合数、费马小定理、逆元、同余定理
c++·算法·数论·组合数·费马小定理·逆元·排列数
再渊1 小时前
基因归因到底怎么计算的?
python·深度学习·机器学习
xqqxqxxq1 小时前
LeetCode Hot100 双指针专项题解笔记
笔记·算法·leetcode
E_ICEBLUE1 小时前
Python 拆分 Excel 文件:使用 Spire.XLS 实现按工作表、行、列和条件拆分
python·excel