LeetCode //C - 1220. Count Vowels Permutation

1220. Count Vowels Permutation

Given an integer n, your task is to count how many strings of length n can be formed under the following rules:

  • Each character is a lower case vowel ('a', 'e', 'i', 'o', 'u')
  • Each vowel 'a' may only be followed by an 'e'.
  • Each vowel 'e' may only be followed by an 'a' or an 'i'.
  • Each vowel 'i' may not be followed by another 'i'.
  • Each vowel 'o' may only be followed by an 'i' or a 'u'.
  • Each vowel 'u' may only be followed by an 'a'.

Since the answer may be too large, return it modulo 10^9 + 7.

Example 1:

Input: n = 1

Output: 5

Explanation: All possible strings are: "a", "e", "i" , "o" and "u".

Example 2:

Input: n = 2

Output: 10

Explanation: All possible strings are: "ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" and "ua".

Example 3:

Input: n = 5

Output: 68

Constraints:
  • 1 <= n <= 2 * 10^4

From: LeetCode

Link: 1220. Count Vowels Permutation


Solution:

Ideas:

keep counts of strings ending with each vowel, then update by reverse rules.

Code:
c 复制代码
int countVowelPermutation(int n) {
    const long MOD = 1000000007;

    long a = 1, e = 1, i = 1, o = 1, u = 1;

    for (int len = 2; len <= n; len++) {
        long na = (e + i + u) % MOD;      // previous e/i/u can go to a
        long ne = (a + i) % MOD;          // previous a/i can go to e
        long ni = (e + o) % MOD;          // previous e/o can go to i
        long no = i % MOD;                // previous i can go to o
        long nu = (i + o) % MOD;          // previous i/o can go to u

        a = na;
        e = ne;
        i = ni;
        o = no;
        u = nu;
    }

    return (int)((a + e + i + o + u) % MOD);
}
相关推荐
吃好睡好便好25 分钟前
判断函数的使用
学习·算法·matlab·生活·判断函数
2601_9561219728 分钟前
线性DP(入门)
c++·算法·动态规划
彷徨而立35 分钟前
【C/C++】多线程读写普通 int 变量的一些问题
java·c语言·c++
feilieren40 分钟前
leetcode - 389. 找不同
算法·leetcode
挽星安43 分钟前
2026/8/29
数据结构·算法
positive_zpc1 小时前
进阶数据结构图——最短路径(二)
数据结构·算法·图论·最短路径
positive_zpc1 小时前
进阶数据结构图——最小生成树(一)
数据结构·算法·图论
小灰灰搞电子1 小时前
分享自己写的一个通信协议源码,支持C++和C,双包头+不定长
c语言·开发语言·c++
码完就睡1 小时前
数据结构——遍历二叉树
数据结构·算法