LeetCode Daily 13

2022-1-17 T1220.统计元音字母序列的数目

 

题目描述:

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

 

思路:

计算每次以该字母结尾的情况数记录,每次取余更新情况数,最后结果为五字母的情况总和。

每次取余比最后取余时间快。

 

代码:

class Solution {
public:
   int countVowelPermutation(int n) {
        const int maxValue = 1e9 + 7;
        long a = 1, e = 1, i = 1, o = 1, u = 1, sumA, sumE, sumI, sumO, sumU;
        for(int m = 2; m <= n; m++){
            sumA = (e + u + i) % maxValue;
            sumE = (a + i) % maxValue;
            sumI = (e + o) % maxValue;
            sumO = i;
            sumU = (i + o) % maxValue;
            a = sumA; e = sumE; i = sumI; o = sumO; u =sumU;
        }
        return (a + e + i + o + u) % maxValue;
    }
};
posted @ 2022-01-17 10:16  HM-7  阅读(34)  评论(0)    收藏  举报