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

在这里插入图片描述
我的解法:
感觉是类似于求一个公式,如果把以各个字母开头可能的数量列出来能发现一定规律,其中i,o,u的公式比较好推到,a,e的比较难推到直接公式,但是步长还是能求出来,之后直接求解即可
在这里插入图片描述

n=1 a1+e1+i1+o1+u1=5
n=2 a5+e4+i3+o2+u1=15
n=3 a15+e10+i6+o3+u1=35
n=4 a35+e20+i10+o4+u1=70

u(n)=1
o(n)=n
i(n)=i(n-1)+u(n-1)+o(n-1)
i(n)-i(n-1)=1+n-1=n ( n>=2)
i(n)=(1+n)*n/2
e(n)=e(n-1)+i(n-1)+u(n-1)+o(n-1)
e(n)-e(n-1)=n*(n-1)/2+n=n*(n+1)/2
e(n)=n*(n+1)/2+n+1
class Solution:
    def countVowelStrings(self, n: int) -> int:
        a=[5,15]
        e=[1,4]
        for t in range(2,n):
            i=t+1
            current_e=e[t-1]+i*(i+1)/2
            current_a=a[t-1]+current_e+(1+i)*i/2+i+1
            a.append(current_a)
            e.append(current_e)
        return int(a[n-1])    

标准解法:
发现实际结果就是c(n+4,4)
对于题目要求长度为 n 的答案来说:
如果 a e i o u 的数目确定,排序方式是唯一的
这样问题就转化成,一个长为 n 的字符串,划分成 5 段,能划分多少种
由于每个元素都可能是 0 个,所以各个划分位置可以都在 n 的外面
C(n+4, 4)

class Solution:
    def countVowelStrings(self, n: int) -> int:
        return comb(n + 4, 4)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值