0
点赞
收藏
分享

微信扫一扫

leetcode之动态规划系列算法

微言记 2022-05-05 阅读 70

文章目录

leetcode之动态规划系列算法

1.统计元音字母序列的数目

1.1动态规划

func countVowelPermutation(n int) int {
    const mod int=1e9+7
	var a  int 
    dp :=[5]int{1,1,1,1,1}
    for i :=1;i<n ;i++{
             dp =[5]int{
                  (dp[1]+dp[2]+dp[4])%mod,
                  ( dp[0]+dp[2])%mod,
                   (dp[1]+dp[3])%mod,
                   dp[2]%mod,                
                   (dp[2]+dp[3])%mod,   //这必须加一个逗号,否则会报错
                             }

      }
    for  _, v :=range  dp{
        a=a+v
    }
    return a%mod
}
// a e i o u
	// 0 1 2 3 4
	// 题目中给定的字符的下一个字符的规则如下:
	// 字符串中的每个字符都应当是小写元音字母 (‘a’,‘e’,‘i’,‘o’,‘u’);
	//每个元音 ‘a’ 后面都只能跟着 ‘e’;
	//每个元音 ‘e’ 后面只能跟着 ‘a’ 或者是 ‘i’;
	//每个元音 ‘i’ 后面不能再跟着另一个 ‘i’;
	//每个元音 ‘o’ 后面只能跟着 ‘i’ 或者是 ‘u’;
	//每个元音 ‘u’ 后面只能跟着 ‘a’;
	//以上等价于每个字符的前一个字符的规则如下:
	//
	//元音字母 ‘a’ 前面只能跟着 ‘e’,‘i’,‘u’;
	//元音字母 ‘e’ 前面只能跟着 ‘a’,‘i’;
	//每个元音 ‘i’ 前面只能跟着 ‘e’,‘o’;   ei eo
	//每个元音 ‘o’ 前面只能跟着 ‘i’;
	//每个元音 ‘u’ 后面只能跟着 ‘o’,‘i’;   uo ui
/*
n=1, dp=[1,1,1,1,1]
n=2, dp=[3,2,2,1,2]
n=3  dp=[6,5,3,2,3]*/
//注意:进行for循环里的dp操作时,不会按顺序依次对dp数组进行赋值,而是一次性对dp里面所有的数组的值进行赋值

image-20220117122426527

举报

相关推荐

0 条评论