题目
给你一个正整数 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
生成不含相邻零的二进制字符串算法
294

被折叠的 条评论
为什么被折叠?



