Skip to content

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

INFO

每日一题 2024.10.24

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

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

go
/*
 * @lc app=leetcode.cn id=3211 lang=golang
 * @lcpr version=30204
 *
 * [3211] 生成不含相邻零的二进制字符串
 */

func validStrings(n int) []string {
	// 子字符串是指一个字符串中的连续字符序列。换句话说,子字符串是从原字符串中提取的一段连续字符。

	// 就是生成不含相邻零的二进制字符串。

	// return一层的时候退一层

	var result []string

	var generate func(current string, remain int)
	generate = func(current string, remain int) {
		if remain == 0 {
			result = append(result, current)
			return
		}
		// 末尾为1的时候加0
		if len(current) == 0 || current[len(current)-1] != '0' {
			generate(current+"0", remain-1)
		}
		// 末尾为0的时候加1
		// 保证没有相邻0就行
		generate(current+"1", remain-1)
	}
	generate("", n)
	return result
}
本站访客数 人次 本站总访问量