题目链接:1641. 统计字典序元音字符串的数目
题意:
给你一个整数 n
,请返回长度为 n
、仅由元音 (a
, e
, i
, o
, u
) 组成且按 字典序排列 的字符串数量。
字符串 s
按 字典序排列 需要满足:对于所有有效的 i
,s[i]
在字母表中的位置总是与 s[i+1]
相同或在 s[i+1]
之前。
解题思路:
一看就是动态规划。也就是找规律。
发现a元素能够在上一次的每个组合前 加, 而 e 元素能够在除了 a 元素开头的其他元素前面加................以此类推
代码:
class Solution {
public:
int countVowelStrings(int n) {
int a = 1, e = 1, i = 1, o = 1, u = 1; // 初始化
int ans = 0;
for(int j = 1; j <= n; j++) {
ans = a + e + i + o + u; // 每个元素的个数
int k = a + e;
int k2 = a + e + i;
e = ans - a; // e 元素能在除了 a 之前的其他组合中加
i = ans - k; // i 元素能在除了 a,e 之前的的其他组合中加
o = ans - k2; // o 元素能在除了 a,e,i 之前的其他组合中加
// u 不变,只能在上一次的u组合上加,只有一个
a = ans; // a 元素能在上一次的所有组合中加
}
return ans;
}
};