题目
给你一个正整数 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