二分字符串:给定正整数N,计算所有长度为N但没有连续1的二分字符。

思路:

        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

本人是个小白,写这个的原因也是希望能够帮助有需要的同学(自己查了半天也没找到答案)。

如果大家有其他的方法和思路,欢迎进行补充。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值