假设我们有一个数字n,我们必须找到可以使用以下规则生成的长度为n的字符串数-
每个字符都是小写的元音[a,e,i,o,u]
“ a”后面只能跟一个“ e”
“ e”后面只能加上“ a”和“ i”中的任何一个
“ i”后面不能跟另一个“ i”
“ o”后面只能加上“ i”和“ u”中的任何一个
“ u”后面只能跟一个“ a”
如果结果很大,则将结果修改为10 ^ 9 + 7。
因此,如果输入类似n = 2,则输出将为10,因为我们可以生成以下两个字母字符串:[“ ae”,“ ea”,“ ei”,“ ia”,“ ie”,“ io”,“ iu”,“ oi”,“ ou”,“ ua”]
为了解决这个问题,我们将遵循以下步骤-
m = 10 ^ 9 + 7
如果n等于0,则
返回0
定义五个变量a,e,i,o,u,最初均为1
一个:= e + i + u
e:= a + i
我:= e + o
o:=我
你:= i + o
对于_在0到n-1的范围内,执行
返回(a + e + i + o + u)mod m
让我们看下面的实现以更好地理解-
class Solution: def solve(self, n): m = (10 ** 9 + 7) if n == 0: return 0 a = e = i = o = u = 1 for _ in range(n-1): a, e, i, o, u = e+i+u, a+i, e+o, i, i+o return (a + e + i + o + u) % m ob = Solution()print(ob.solve(3))
3
输出结果
19