Python|Leetcode《1220》|统计元音字母序列的数目

简介: Python|Leetcode《1220》|统计元音字母序列的数目

一、题目描述

题目:统计元音字母序列的数目

难度:困难

地址:《统计元音字母序列的数目》

描述:给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串:

字符串中的每个字符都应当是小写元音字母('a', 'e', 'i', 'o', 'u'


每个元音'a'后面都只能跟着'e'

每个元音'e'后面只能跟着'a'或者是'i'

每个元音'i'后面 不能 再跟着另一个'i'

每个元音'o'后面只能跟着'i'或者是'u'

每个元音'u'后面只能跟着'a'

由于答案可能会很大,所以请你返回 模 10^9 + 7 之后的结果。


示例1

输入:n = 1

输出:5

解释:所有可能的字符串分别是:"a", "e", "i" , "o""u"


示例2

输入:n = 2

输出:10

解释:所有可能的字符串分别是:"ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou""ua"


示例3

输入:n = 5

输出:68


提示:image.png


image.png

 

二、题目解析

此题虽为难题,但是本质上可以看作是动态规划问题的一般形态。


初始形态为字符串长度为1的时候的形态(n=1),后续随着n的增大,我们不断的替换每一层的字符中有几个a、e、i、o、u即可,例如第二层的字符中,在第一层字符e、i、u的后面会出现字符a。图解如下:

image.png

不同颜色的连线代表第二层中的各个字符会由上一层中的哪些字符得到,上一层中有几个这样的字符数量就为几,后面依次类推即可。


三、解题代码

解法

class Solution:
    def countVowelPermutation(self, n: int) -> int:
        a, e, i, o, u = 1, 1, 1, 1, 1
        for _ in range(n - 1):
            a, e, i, o, u = e + u + i, a + i, o + e, i, i + o
        return (a + e + i + o + u) % (10**9 + 7)
相关文章
|
15小时前
|
数据可视化 数据挖掘 Python
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(下)
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
|
15小时前
|
数据可视化 API 开发者
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(上)
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
|
15小时前
|
存储 运维 数据挖掘
Python列表中每个元素前面连续重复次数的数列统计
Python列表中每个元素前面连续重复次数的数列统计
9 1
|
15小时前
|
索引 Python
【Python操作基础】——序列
【Python操作基础】——序列
|
15小时前
leetcode代码记录(最长连续递增序列
leetcode代码记录(最长连续递增序列
11 2
|
15小时前
leetcode代码记录(最长递增子序列
leetcode代码记录(最长递增子序列
9 1
|
15小时前
leetcode代码记录(第一个出现两次的字母
leetcode代码记录(第一个出现两次的字母
11 2
|
15小时前
leetcode代码记录(有效的字母异位词
leetcode代码记录(有效的字母异位词
10 1
|
15小时前
|
算法
leetcode代码记录(摆动序列
leetcode代码记录(摆动序列
9 0
|
15小时前
|
数据采集 数据挖掘 测试技术
python、R语言ARIMA-GARCH分析南方恒生中国企业ETF基金净值时间序列分析
python、R语言ARIMA-GARCH分析南方恒生中国企业ETF基金净值时间序列分析

热门文章

最新文章