Leetcode每日打卡第7天

题目

 生成不含相邻零的二进制字符串

给你一个正整数 n

如果一个二进制字符串 x 的所有长度为 2 的

子字符串

中包含 至少 一个 "1",则称 x 是一个 有效 字符串。

返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。

示例 1:

输入: n = 3

输出: ["010","011","101","110","111"]

解释:

长度为 3 的有效字符串有:"010""011""101""110" 和 "111"

示例 2:

输入: n = 1

输出: ["0","1"]

解释:

长度为 1 的有效字符串有:"0" 和 "1"

思路

用一个 0 到 2 n −1 之间的数字的二进制形式代表字符串,如果这个二进制没有相邻的 0,则代表是一个有效字符串。那么怎么判断是否有相邻的 0 呢?首先将数字按位取反,记为 t。如果 t & (t>>1) 为 0,则 t 中没有相邻的 1。

python3代码

class Solution:
    def validStrings(self, n: int) -> List[str]:
        res = []
        mask = (1 << n) - 1
        for i in range(1<<n):
            t = mask ^ i
            if not (t >> 1 & t):
                res.append(f"{i:0{n}b}")
        return res


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值