17. 电话号码的字母组合

  • bfs解法: 每次计数queue中的长度n,pop(0) n次获得cur,把可能的字符加到cur中,再append到queue中。
def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if len(digits) == 0:
            return []
        kv = {"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"]}
        
        queue = [""]
        for digit in digits:
            n = len(queue)
            for i in range(n):
                cur = queue.pop(0)
                if digit in kv:
                    for val in kv[digit]:
                        queue.append(cur + val)
        return queue
  • dfs解法: 变量为idx(表示当前要处理的index)和cur(表示当前已经组成的字符串)
def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if len(digits) == 0:
            return []
        kv = {"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"]}
        
        self.res = []
        self.dfs("", 0, digits, kv)
        return self.res
    
    def dfs(self, cur, idx, digits, kv):
        if len(cur) == len(digits):
            self.res.append(cur)
            return
        for val in kv[digits[idx]]:
            cur += val
            self.dfs(cur, idx + 1, digits, kv)
            cur = cur[:-1]

你可能感兴趣的:(17. 电话号码的字母组合)