【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
相关推荐
2401_879693876 小时前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
张李浩12 小时前
Leetcode 054螺旋矩阵 采用方向数组解决
算法·leetcode·矩阵
xixihaha132412 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
big_rabbit050212 小时前
[算法][力扣101]对称二叉树
数据结构·算法·leetcode
美好的事情能不能发生在我身上12 小时前
Hot100中的:贪心专题
java·数据结构·算法
xixihaha132412 小时前
Python游戏中的碰撞检测实现
jvm·数据库·python
2301_8217005313 小时前
C++编译期多态实现
开发语言·c++·算法
xixihaha132413 小时前
C++与FPGA协同设计
开发语言·c++·算法
ID_1800790547313 小时前
模拟1688商品详情的Python API实现,返回符合风格的JSON数据
开发语言·python·json
程序员小远13 小时前
软件测试之功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例