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);
}
相关推荐
午彦琳10 小时前
2026.9.17
数据结构·算法·leetcode
木井巳10 小时前
【记忆化搜索】不同路径
java·算法·leetcode·深度优先·剪枝·推荐算法
怕浪猫12 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
free-elcmacom12 小时前
C语言指针进阶——指针数组模拟二维数组,以及二级指针到底怎么理解
c语言·visual studio code
aichitang202412 小时前
前端小skill
前端·人工智能·算法·ai·前端框架
山下梅子酒22512 小时前
洛谷-入门-B2049
c语言
All for pursuit.13 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
木子算法13 小时前
测出来的值会抖:约束和目标带噪声时,「可行」和「更好」该怎么判
人工智能·算法·目标跟踪
圣保罗的大教堂14 小时前
leetcode 1477. 找两个和为目标值且不重叠的子数组 中等
leetcode
剑指offer.14 小时前
嵌入式硬件-ARM芯片的启动
c语言·嵌入式硬件·嵌入式