当前位置:网站首页>LeetCode—<动态规划专项>剑指 Offer 19、49、60
LeetCode—<动态规划专项>剑指 Offer 19、49、60
2022-07-02 09:43:00 【Ostrich5yw】
剑指 Offer 19. 正则表达式匹配、49. 丑数、60. n个骰子的点数
题目描述:[19]
请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。[49]
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。[60]
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
考察重点:
第19题二维状态数组,其中dp[i][j]=true表示s[0, i)与p[0, j)模式匹配
第49题三个指针分别指向2,3,5对应的位置,每次放入积最小的数
第60题令f(n,s)为二维矩阵,表示为n个骰子点数为s的情况;有f(n,s)=f(n-1,s-1)+f(n-1,s-2)+f(n-1,s-3)+f(n-1,s-4)+f(n-1,s-5)+f(n-1,s-6)
第19题
func isMatch(s string, p string) bool {
sLen, pLen := len(s), len(p)
var dp [][]bool
for x := 0; x <= sLen; x++ {
//建立一个存储状态的数组
ar := make([]bool, pLen+1) //其中dp[i][j]=true表示s[0, i)与p[0, j)模式匹配
dp = append(dp, ar)
}
dp[0][0] = true //边界条件, 如果从0开始则边界为-1,因此我们将结果存放在1——(Len+1),所以要注意dp比s和p多一位
for i := 0; i <= sLen; i++ {
for j := 1; j <= pLen; j++ {
if p[j-1] == '*' {
//dp[i][j-2]表示'*'代表的次数为0,后面表示'*'代表的次数为1
dp[i][j] = dp[i][j-2] || (i > 0 && (s[i-1] == p[j-2] || p[j-2] == '.') && dp[i-1][j])
} else {
dp[i][j] = i > 0 && (s[i-1] == p[j-1] || p[j-1] == '.') && dp[i-1][j-1]
}
}
}
return dp[sLen][pLen]
}
第49题
func nthUglyNumber(n int) int {
res := make([]int, n)
res[0] = 1
p2, p3, p5 := 0, 0, 0
for i := 1;i < n;i ++{
res[i] = min(res[p2] * 2, res[p3] * 3, res[p5] * 5)
if res[i] == res[p2] * 2{
//不可以使用if else,当多个最小值相等时,应该同时后移以保障去重
p2 ++
}
if res[i] == res[p3] * 3{
p3 ++
}
if res[i] == res[p5] * 5{
p5 ++
}
}
return res[n-1]
}
func min(a, b, c int)int{
if(a < b){
if a < c{
return a
}
return c
}
if b < c{
return b
}
return c
}
第60题
// 令f(n,s)为二维矩阵,表示为n个骰子点数为s的情况
func dicesProbability(n int) []float64 {
dp := make([][]int32, 0) //建立一个n+1行,n*6+1列的数组。其中+1是方便处理边界。
for i := 0;i < n+1;i ++{
tt := make([]int32, n*6+1)
dp = append(dp, tt)
}
res := make([]float64, 5*n+1) //保存n个骰子时的结果
allSituation := math.Pow(6, float64(n)) // 数组中保存的出现的次数,所以计算总次数以计算概率
for j := 1; j <= 6; j++ {
dp[1][j] = 1
}
for i := 1; i <= n; i++ {
// i个骰子
for j := i; j <= n*6; j++ {
//和为j
for k := 1; k <= 6; k++ {
// f(n,s)=f(n-1,s-1)+f(n-1,s-2)+f(n-1,s-3)+f(n-1,s-4)+f(n-1,s-5)+f(n-1,s-6)
if j >= k {
dp[i][j] += dp[i-1][j-k]
}
if i == n {
res[j-i] = float64(dp[i][j]) / allSituation
}
}
}
}
return res
}
边栏推荐
- ES集群中节点与分片的区别
- Natural language processing series (I) -- RNN Foundation
- 史上最易懂的f-string教程,收藏这一篇就够了
- 还不会安装WSL 2?看这一篇文章就够了
- HOW TO ADD P-VALUES TO GGPLOT FACETS
- Le tutoriel F - String le plus facile à comprendre de l'histoire.
- PyTorch nn.RNN 参数全解析
- SVO2系列之深度濾波DepthFilter
- GGPUBR: HOW TO ADD ADJUSTED P-VALUES TO A MULTI-PANEL GGPLOT
- SSH automatically disconnects (pretends to be dead) after a period of no operation
猜你喜欢

H5, add a mask layer to the page, which is similar to clicking the upper right corner to open it in the browser

【工控老马】西门子PLC Siemens PLC TCP协议详解

基于Arduino和ESP8266的Blink代码运行成功(包含错误分析)

BEAUTIFUL GGPLOT VENN DIAGRAM WITH R

Depth filter of SvO2 series

甜心教主:王心凌

HOW TO CREATE A BEAUTIFUL INTERACTIVE HEATMAP IN R

Natural language processing series (II) -- building character level language model using RNN

Larvel modify table fields

Sort---
随机推荐
输入一个三位的数字,输出它的个位数,十位数、百位数。
Natural language processing series (I) -- RNN Foundation
自然语言处理系列(三)——LSTM
堆(优先级队列)
Dynamic debugging of multi file program x32dbg
lombok常用注解
[QT] Qt development environment installation (QT version 5.14.2 | QT download | QT installation)
测试左移和右移
On data preprocessing in sklearn
Find the factorial of a positive integer within 16, that is, the class of n (0= < n < =16). Enter 1111 to exit.
史上最易懂的f-string教程,收藏这一篇就够了
CDH6之Sqoop添加数据库驱动
甜心教主:王心凌
Fabric. JS 3 APIs to set canvas width and height
还不会安装WSL 2?看这一篇文章就够了
小程序链接生成
ES集群中节点与分片的区别
Leetcode922 sort array by parity II
How to Create a Beautiful Plots in R with Summary Statistics Labels
Full link voltage measurement