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 |
|