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);
}
相关推荐
D e re k ZH1 小时前
P5025 [SNOI2017] 炸弹
c++·算法
A boy CDEF girl1 小时前
算法题专栏:优选算法
数据结构·算法·leetcode
没落之王1 小时前
三易五行看宋朝的三界确立
大数据·人工智能·算法
wuminyu1 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
坤坤子吖2 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
Js.Tx3 小时前
【具体数学 Concrete Mathematics】2.1.5 一般性的方法
算法·具体数学
秋天的怀念_David5 小时前
算法一千零一夜 · 作品相关:版权与致谢声明
程序人生·算法·学习方法
图灵-M5 小时前
【数据结构】静态 & 动态顺序表
c语言·数据结构·笔记
揽星河..5 小时前
【C语言】数组
c语言·开发语言·算法
careathers5 小时前
【数据结构】基于比较的排序算法 - 选择排序
数据结构·算法·排序算法