📅  最后修改于: 2023-12-03 15:42:12.907000             🧑  作者: Mango
这是一道来自 GATE CS 2021 设置 2 的编程题,题号为第 55 题。此题需要使用 Python 编写程序,要求输入一个整数 N,输出由 0 和 1 组成的长度为 N 的所有字符串中,以 01 或 10 为子串的字符串个数。
输入:
输出:
输出格式一个整数,表示符合要求的字符串数量。
例如,当 N = 3 时,位数为 3 的所有字符串如下所示:
000
001
010
011
100
101
110
111
其中符合要求的字符串为 010、101,共 2 个。
首先,我们需要查询 01 和 10 的出现位置,然后计算它们的组合数量即可。但是,计算组合数量是非常耗费时间的,因此我们需要寻找某种类似规律的东西。
我们可以先从短字符串入手,通过手工计算找到如下的规律:
在这个规律中,我们可以看到一个斐波那契数列的样子。我们可以用数列生成函数来求出数列的值,然后使用递推方式即可计算出答案。
以下是用 Python 代码实现上述思路的代码片段,返回 markdown 格式。
def fibonacci(n):
if n == 0: return 0
if n == 1: return 2
return fibonacci(n - 1) + fibonacci(n - 2)
def count_strs(n):
return fibonacci(n)
print(count_strs(3)) # 应输出 2