LeetCode 1641. 统计字典序元音字符串的数目

1641. 统计字典序元音字符串的数目

给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。

字符串 s字典序排列 需要满足:对于所有有效的 is[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。

示例 1:

输入:n = 1
输出:5
解释:仅由元音组成的 5 个字典序字符串为 ["a","e","i","o","u"]

示例 2:

输入:n = 2
输出:15
解释:仅由元音组成的 15 个字典序字符串为
["aa","ae","ai","ao","au","ee","ei","eo","eu","ii","io","iu","oo","ou","uu"]
注意,"ea" 不是符合题意的字符串,因为 'e' 在字母表中的位置比 'a' 靠后

示例 3:

输入:n = 33
输出:66045

提示:

  • 1 <= n <= 50

二、方法一

动规,完全背包

class Solution {
    public int countVowelStrings(int n) {
        int[] dp = new int[6];
        for (int i = 1; i <= 5; i++) {
            dp[i] = 1;
        }
        for (int j = 2; j <= n; j++) {
            for (int i = 2; i <= 5; i++) {
                dp[i] += dp[i - 1];
            }
        }
        return dp[1] + dp[2] + dp[3] + dp[4] + dp[5];
    }
}

复杂度分析

  • 时间复杂度:O(n)。

  • 空间复杂度:O(1)。

三、方法二

排列组合,隔板法
LeetCode 1641. 统计字典序元音字符串的数目_第1张图片

class Solution {
    public int countVowelStrings(int n) {
        return (n + 4) * (n + 3) * (n + 2) * (n + 1) / 24;
    }
}

复杂度分析

  • 时间复杂度:O(1)。

  • 空间复杂度:O(1)。

你可能感兴趣的:(LeetCode题解,leetcode,动态规划,算法)