【leetcode】1220. Count Vowels Permutation
时间:2019-10-10
本文章向大家介绍【leetcode】1220. Count Vowels Permutation,主要包括【leetcode】1220. Count Vowels Permutation使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目如下:
Given an integer
n
, your task is to count how many strings of lengthn
can be formed under the following rules:
- Each character is a lower case vowel (
'a'
,'e'
,'i'
,'o'
,'u'
)- Each vowel
'a'
may only be followed by an'e'
.- Each vowel
'e'
may only be followed by an'a'
or an'i'
.- Each vowel
'i'
may not be followed by another'i'
.- Each vowel
'o'
may only be followed by an'i'
or a'u'
.- Each vowel
'u'
may only be followed by an'a'.
Since the answer may be too large, return it modulo
10^9 + 7.
Example 1:
Input: n = 1 Output: 5 Explanation: All possible strings are: "a", "e", "i" , "o" and "u".Example 2:
Input: n = 2 Output: 10 Explanation: All possible strings are: "ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" and "ua".Example 3:
Input: n = 5 Output: 68Constraints:
1 <= n <= 2 * 10^4
解题思路:用动态规划的方法,记dp[i][j] 为第i个位置放第j个元音字母的情况下可以组成的字符串的个数,很容易得到状态转移方程。例如如果第i个元素是'e',那么第i-1的元素就只能是'a'或者'i',有 dp[i]['e'] = dp[i-1]['a'] + dp[i-1]['i'],最后只有求出第n个元素放这五个元音字母的个数的和即可。
代码如下:
class Solution(object): def countVowelPermutation(self, n): """ :type n: int :rtype: int """ dp = [[0] * 5 for _ in range(n)] vowels = ['a', 'e', 'i', 'o', 'u'] dp[0][0] = dp[0][1] =dp[0][2] =dp[0][3] = dp[0][4] = 1 for i in range(1,len(dp)): for j in range(len(vowels)): if vowels[j] == 'a': dp[i][j] += dp[i - 1][vowels.index('e')] dp[i][j] += dp[i - 1][vowels.index('u')] dp[i][j] += dp[i - 1][vowels.index('i')] elif vowels[j] == 'e': dp[i][j] += dp[i - 1][vowels.index('a')] dp[i][j] += dp[i - 1][vowels.index('i')] elif vowels[j] == 'i': dp[i][j] += dp[i - 1][vowels.index('e')] dp[i][j] += dp[i - 1][vowels.index('o')] elif vowels[j] == 'o': dp[i][j] += dp[i - 1][vowels.index('i')] elif vowels[j] == 'u': dp[i][j] += dp[i - 1][vowels.index('i')] dp[i][j] += dp[i - 1][vowels.index('o')] return sum(dp[-1]) % (10**9 + 7)
原文地址:https://www.cnblogs.com/seyjs/p/11646665.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day16:合并两个排序的链表
- 大厂面试爱问的「调度算法」,20 张图一举拿下
- Day17:树的子结构
- 多线程基础(七):关于HotSpot中notify方法不具备随机性的证明
- Day18:二叉树的镜像
- ksubdomain 无状态域名爆破工具
- Day19:顺时针打印矩阵
- 疑似 KimsukyAPT 组织最新攻击活动样本分析
- 查找被删除但仍然占据磁盘的文件
- WPF 获取本机所有字体拿到每个字符的宽度和高度
- WPF 自己封装 Skia 差量绘制控件
- C# dotnet 使用 OpenXml 解析 Word 文件
- Day20:包含min函数的栈
- No module named ‘SerialClient‘和Cannot import package : rosserial_arduino
- 提升开发效率N倍的20+命令行神器!(附 demo)