题目大意

输入手机键盘的数字,组合所有可能的字母。

解题思路

DFS深度优先

代码

class Solution(object):
    def letterCombinations(self, digits):
        """ :type digits: str :rtype: List[str] """

        def dfs(num, string, res):
            print string, res
            if num == length:
                res.append(string)
                return
            for letter in dict[digits[num]]:
                print letter
                dfs(num+1, string+letter, res)

        dict = {
  '2':['a','b','c'],
                '3':['d','e','f'],
                '4':['g','h','i'],
                '5':['j','k','l'],
                '6':['m','n','o'],
                '7':['p','q','r','s'],
                '8':['t','u','v'],
                '9':['w','x','y','z']
                }
        res = []
        length = len(digits)
        if length == 0:
            return []
        dfs(0, '', res)
        return res

总结

该题目的标签是:回溯法
回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。

回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:

  • 找到一个可能存在的正确的答案
  • 在尝试了所有可能的分步方法后宣告该问题没有答案

在最坏的情况下,回溯***导致一次复杂度为指数时间的计算。