|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 糖逗 于 2020-12-7 21:31 编辑
题目描述:
- 给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。
- 字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[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) {
- //动态规划
- if(n == 1) return 5;
- //定义dp【i】【j】是以前i个(从0开始)为结尾的,且长度为j的字符串的个数
- int dp[5][n + 1];
- dp[0][1] = 1, dp[1][1] = 2, dp[2][1] = 3, dp[3][1] = 4, dp[4][1] = 5;
- for(int i = 0; i < 5; i++){
- for(int j = 2; j <= n; j++){
- if(i == 0)dp[i][j] = dp[i][j-1];
- else{
- dp[i][j] = dp[i-1][j] + dp[i][j-1];//最后两个字符相同和不同两种情况
- }
- }
- }
- return dp[4][n];
- }
- };
复制代码
参考链接:https://leetcode-cn.com/problems ... n-mou-xian-de-me-w/ |
|