题目地址
17. Letter Combinations of a Phone Number
解题方法
全排列(Combination / Permutation)问题,并且问题规模不大(digits
的最大长度为 6),一眼递归回溯(本题不需要回溯)。
递归问题首先从边界条件开始考虑,然后思考能不能转换为更小的问题:
- 0 个数字,不需要任何操作,直接返回(相当于得到一个空字符串)。
- 1 个数字,枚举这个数字所对应的所有字母,相当于这个数字对应的所有字母拼接空字符串。
- 2 个数字,枚举第二个数字对应的所有字母,并与第一个数字对应的所有字母拼接。
- n 个数字,枚举第 n 个数字对应的所有字母,并与第 n - 1 个数字对应的所有结果拼接。
按照以上方法编写递归代码即可。
复杂度分析
时间复杂度:O(3^m * 4^n),其中 m 为输入中对应 3 个字母的数字总数,n 为输入中对应 4 个字母的数字总数。
空间复杂度:O(m + n),其中 m 为输入中对应 3 个字母的数字总数,n 为输入中对应 4 个字母的数字总数,m + n 为递归调用栈的最大深度。
AC 代码
1 | var ( |
About this Post
This post is written by Noelle Mu, licensed under CC BY-NC 4.0.