3211. 生成不含相邻零的二进制字符串
题目描述
给你一个正整数 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"
。
提示:
1 <= n <= 18
解法
方法一:DFS
我们可以枚举长度为 \(n\) 的二进制字符串的每个位置 \(i\),然后对于每个位置 \(i\),我们可以枚举其可以取的值 \(j\),如果 \(j\) 为 \(0\),那么我们需要判断其前一个位置是否为 \(1\),如果为 \(1\),则可以继续递归下去,否则不合法,如果 \(j\) 为 \(1\),则直接递归下去。
时间复杂度 \(O(n \times 2^n)\),其中 \(n\) 为字符串长度。忽略答案数组的空间消耗,空间复杂度 \(O(n)\)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|