zoukankan      html  css  js  c++  java
  • 【leetcode】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

    解题思路:用动态规划的方法,记dp[i][j] 为第i个位置放第j个元音字母的情况下可以组成的字符串的个数,很容易得到状态转移方程。例如如果第i个元素是'e',那么第i-1的元素就只能是'a'或者'i',有 dp[i]['e'] = dp[i-1]['a'] + dp[i-1]['i'],最后只有求出第n个元素放这五个元音字母的个数的和即可。

    代码如下:

    class Solution(object):
        def countVowelPermutation(self, n):
            """
            :type n: int
            :rtype: int
            """
            dp = [[0] * 5 for _ in range(n)]
            vowels = ['a', 'e', 'i', 'o', 'u']
            dp[0][0] = dp[0][1] =dp[0][2] =dp[0][3] = dp[0][4] = 1
            for i in range(1,len(dp)):
                for j in range(len(vowels)):
                    if vowels[j] == 'a':
                        dp[i][j] += dp[i - 1][vowels.index('e')]
                        dp[i][j] += dp[i - 1][vowels.index('u')]
                        dp[i][j] += dp[i - 1][vowels.index('i')]
                    elif vowels[j] == 'e':
                        dp[i][j] += dp[i - 1][vowels.index('a')]
                        dp[i][j] += dp[i - 1][vowels.index('i')]
                    elif vowels[j] == 'i':
                        dp[i][j] += dp[i - 1][vowels.index('e')]
                        dp[i][j] += dp[i - 1][vowels.index('o')]
                    elif vowels[j] == 'o':
                        dp[i][j] += dp[i - 1][vowels.index('i')]
                    elif vowels[j] == 'u':
                        dp[i][j] += dp[i - 1][vowels.index('i')]
                        dp[i][j] += dp[i - 1][vowels.index('o')]
            return sum(dp[-1]) % (10**9 + 7)
  • 相关阅读:
    MySQL8.0 不能使用group by解决方法
    xtrabackup备份恢复
    pycharm使用
    CMDB开发(三)
    Restful接口规范
    django-rest-framework框架(一)
    CMDB开发(二)
    CMDB开发(一)
    数据可视化之matplotlib模块
    数据分析之pyecharts v1版本
  • 原文地址:https://www.cnblogs.com/seyjs/p/11646665.html
Copyright © 2011-2022 走看看