美文网首页
LeetCode-1641-统计字典序元音字符串的数目

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

作者: 阿凯被注册了 | 来源:发表于2020-11-26 00:17 被阅读0次

原题链接:https://leetcode-cn.com/problems/count-sorted-vowel-strings/
标签: 动态规划排列组合

给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。
字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。


image.png

解题思路:

  1. 动态规划
    1.1. 当n=1时,即从5个元音字母中选一个,那么以每个元音字母结尾能组成的结果都为1,即a[0][j]=1 when j from 0 to 4
    1.2. 分析n=2的情况,当元音取i结尾时,比取e结尾时,多了一个n=1时的i,即a[i][j] = a[i-1][j] + a[i][j-1]
    1.3. 最后返回第n行的结果数组和sum(a[-1])
a e i o u
n=1 1a 1e 1i 1o 1u
n=2 1aa 2ae、ee 3ai、ei、ii 4 5
n=3 1 3 6 10 15
n...
  1. 排列组合方法:有n个数,在其中插入4个隔板,就分为了5组,再在(n+4)中取4个,即C^{n+4}_4

Python3代码:

class Solution:
    def countVowelStrings(self, n: int) -> int:
        if n == 0: return 0
        if n == 1: return 5
        arr = [[0 for _ in range(5)] for _ in range(n)]

        for i in range(5):
            arr[0][i] = 1

        for i in range(1, n):
            for j in range(5):
                if j == 0:
                    arr[i][j] = 1
                else:
                    arr[i][j] = arr[i-1][j] + arr[i][j-1]
        
        return sum(arr[-1])
class Solution:
    def countVowelStrings(self, n: int) -> int:
        return int((n+4)*(n+3)*(n+2)*(n+1)/4/3/2)

相关文章

网友评论

      本文标题:LeetCode-1641-统计字典序元音字符串的数目

      本文链接:https://www.haomeiwen.com/subject/vuiwiktx.html