给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。
字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s [i] 在字母表中的位置总是与 s [i+1] 相同或在 s [i+1] 之前。
题目链接:
# 1. 解题思路
将 a,e,i,o,u 标记为 0,1,2,3,4,则:
dp[i][j]
表示 第 i 个位置上最大放置 j 的总方案数 (i,j 都从 0 开始),可得出递推公式:
- 当
j = 0
时,dp[i][j] = dp[i-1][j]
; - 当
j > 0
时,dp[i][j] = dp[i-1][j] + dp[i][j-1]
;
# 2. 运行结果
# 3. 代码
class Solution { | |
public int countVowelStrings(int n) { | |
int[][] dp = new int[n][5]; | |
for (int i = 0; i < 5; ++i) { | |
dp[0][i] = i + 1; | |
} | |
for (int i = 1; i < n; ++i) { | |
dp[i][0] = dp[i-1][0]; | |
for (int j = 1; j < 5; ++j) { | |
dp[i][j] = dp[i][j - 1] + dp[i-1][j]; | |
} | |
} | |
return dp[n-1][4]; | |
} | |
} |