题目
设定了具体的位置规则,即可用动态规划。
代码写的有问题,但是大体思路还是在的,具体细节以后再改。
class Solution {
public int countVowelPermutation(int n) {
int[][] dp = new int[n][5];
int mod = 10^9+7;
dp[0][0] = 1;
dp[0][1] = 1;
dp[0][2] = 1;
dp[0][3] = 1;
dp[0][4] = 1;
for(int i=1;i<n;i++){
for(int j=0;j<5;j++){
if(j==0){
dp[i][j] += dp[i-1][1]%mod;
dp[i][j] += dp[i-1][2]%mod;
dp[i][j] += dp[i-1][4]%mod;
}else if(j==1){
dp[i][j] += dp[i-1][0]%mod;
dp[i][j] += dp[i-1][2]%mod;
}else if(j==2){
dp[i][j] += dp[i-1][1]%mod;
dp[i][j] += dp[i-1][3]%mod;
}else if(j==3){
dp[i][j] += dp[i-1][2]%mod;
}else{
dp[i][j] += dp[i-1][2]%mod;
dp[i][j] += dp[i-1][3]%mod;
}
dp[i][j] %= mod;
}
}
int sum = 0;
for(int i=0;i<5;i++){
sum += dp[n-1][i]%mod;
sum = sum%mod;
}
return sum;
}
}
本文介绍了一种使用动态规划算法解决特定位置规则下的元音字母排列问题的方法。通过设定状态转移矩阵,实现了对任意长度字符串中元音字母合法排列数目的高效计算。文章详细展示了算法的实现代码,并讨论了其潜在的优化方向。

287

被折叠的 条评论
为什么被折叠?



