动态规划(Dynamic Programing),通过解决存储子问题结果,迭代h解决整个问题
斐波纳切数列(fibbonacci)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//n ≥ 3
func fibbonacciDynamic(n int) []int {
table := make([]int, n+1)
table[0] = 0
table[1] = 1
for i := 2; i <= n; i++ {
// 动态规划,子问题环环相扣构成母问题
table[i] = table[i-1] + table[i-2]
}
return table
}
func fibbonacci(n int) int {
if n < 2 {
return n
}
return fibbonacci(n-1) + fibbonacci(n-2)
}
|
一条包含字母 A-Z 的消息通过以下方式进行了编码:
1
2
3
4
|
'A' -> 1
'B' -> 2
...
'Z' -> 26
|
给定一个只包含数字的非空字符串,请计算解码方法的总数。
1
2
3
|
"12" #2
"01" #0
"226" #3
|
提示:状态转移方程需要分类讨论»
子序列匹配失败,则母序列一定失败;
显然p为空时,s 只有为空才能匹配成功。s为空时,p为空或全为*时匹配。
如:s取子序列为空 ""
p取子序列"","a", "a*" "a*a" "a*ab"
1
2
3
4
|
0 1 1 1 1 # 纵坐标为s的子序列 横坐标为p的子序列
1
1
1
|