思路:
1. 先找出所有长度为N的二进制字符串,也就是2的N次方个数
2. 判断这个数是否符合题目的条件,符合就加到返回列表中,不符合就舍弃
思路很简单,怎么实现呢?
1. 找出长度为N的二进制数,用一个for循环就可以,代码中的i就是对应的各个数了
for i in rang(2**N)
2. 再将他们转变为2进制数就可以了(具体的bin用法可以自行查看,比较简单)
bin_2 = bin(i)[2:].zfill(N)
3. 接着判断是否满足题意(是否含有连续1),判断的思路我参考的是这个博主的文章。就是--(原数 & 原数位移一位),&表示位与操作。
我们不能对 bin_2 进行位移和位与操作,因为转换之后的数据类型是str型,不支持。我在这里一直报错!!!所以我们要对i进行操作。
4. 之后就是保存符合条件的二进制数了,然后返回就可以了
整体的代码就是:
def bin_seq2(n):
res = []
for i in range(2 ** n):
bin_2 = bin(i)[2:].zfill(n)
if i & (i << 1) == 0:
res.append(bin_2)
return res
本人是个小白,写这个的原因也是希望能够帮助有需要的同学(自己查了半天也没找到答案)。
如果大家有其他的方法和思路,欢迎进行补充。