Python实现的代码如下:
def calc_run_number(m, n):import numpy as np
f = np.zeros([m, n])
for i in range(m):
for j in range(n):
if (i ==0 or j == 0): f[i][j] = 1
else: f[i, j] = f[i-1][j] + f[i][j-1]
return f[m-1][n-1
像类似的案例其实还有很多的,主要还是要多多联系才行。
现在,我们回归到正则匹配这道题,再次看下题面:
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
. 匹配任意单个字符
匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
前面也有说到,使用动态规划之前需要定义一个数组来存储数据状态,这道题中涉及s和p两个字符串,所以我们需要定义二维数组,也就是矩阵dp。假设s和p的长度分别为s_len和p_len,则dp数组的shape值应该为(s_len + 1, p_len + 1),其中+1主要是的因为需要额外引入一行一列,用于表示空字符""的匹配情况,这里可以理解成初始值的引入。
dp[i][j]表示的就是s[:i]能否通过dp[:j]正则表达式来进行匹配,其值为True或False。True表示的是能匹配成功,比如s:abc p:a.c,而False表示的是不能匹配,比如s:abc p:ab*,这一点一定要理解清楚,非常重要,也是解这道题的关键之一。