Chapter 5: Recursion and Dynamic Programming

知识解析

5.1 问题空间

5.2 加法原理和乘法原理

我们最早在小学数学中接触过加法原理和乘法原理,他们的内容是:

加法原理:如果做一件事情有n类方法,每类方法都可以完整完成这件事情,那么做这件事情的总方法数量,就是把每一类方法的数量加和起来。比如从A到C市,有5种公交,3种地铁,2种计程车,那就有 5+3+25 + 3 + 2种方法。

乘法原理:如果做一件事情有n个步骤,每个步骤都不可或缺,那么做这件事情的总方法数量,就是把每个步骤的方法数量乘起来。比如从A到C市需要经过B市,A到B市有3种方法,B到C市有5种方法,那么就有 353 * 5 种方法。

无论你有没有意识到,这两个原理会经常在递归和动态规划中用到。因为求解一个问题空间(1维/2维/3维)内“有多少个”的问题,就是在求从起点到终点有多少条路径的问题,那么对每个方向就应该用加法原理,对于同一方向路径的每一步骤,就应该用乘法原理。

e.g. A message containing letters from A-Z is being encoded to numbers, using 'A' -> 1, 'B' -> 2, ... 'Z' -> 26 . Given a non-empty string containing only digits, determine the total number of ways to decode it. (LeetCode: Decode Ways)

Last updated

Was this helpful?