zoukankan      html  css  js  c++  java
  • Letter Combinations of a Phone Number

    Given a digit string, return all possible letter combinations that the number could represent.

    A mapping of digit to letters (just like on the telephone buttons) is given below.

    Input:Digit string "23"
    Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

    这题是组合题,思路很简答,需要同时掌握迭代和递归两种方法。递归都很清楚,思路为dfs + backtracking,迭代版的思路为在之前生成的中间结果上再加一位构成现在的结果。

    迭代版思路如下:

        def letterCombinations(self, digits):
            """
            :type digits: str
            :rtype: List[str]
            """
            hash = {'2':'abc', '3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
            #iterative method
            if not digits:
                return []
            res = [[]]
            for i in digits:
                tmp = []
                for j in hash[i]:
                    for num in res:
                        tmp.append(num + [j]) #取之前结果加1位
                res = tmp + []
            return map(lambda x: ''.join(x),res)
                    

    递归版本:

    class Solution(object):
        def letterCombinations(self, digits):
            """
            :type digits: str
            :rtype: List[str]
            """
            hash = {'2':'abc', '3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
            comb = []
            for i in digits:
                if i in  hash:
                    comb.append(hash[i])
            if not comb:
                return []
            n  = len(comb)
            res = []
            self.dfs(res, comb, [], 0, n)
            return res
            
        def dfs(self, res, comb, cur, index, n): 
            if index == n:
                res.append(''.join(cur))
                return 
            for j in xrange(len(comb[index])):
                cur.append(comb[index][j])
                self.dfs(res, comb, cur, index+1, n)
                cur.pop()

    总结而言python处理这种题不是很高效,主要在于string类型对象不可以修改。

  • 相关阅读:
    sbt commands
    SBT Assembly
    There is no setter for property named 可能产生的原因!
    JSP页面分页显示数据
    CentOS7配置FTP服务器增强版~(零基础学会FTP配置)
    Windows下将程序打包为安装包(最为简易的方式)
    Linux多线程编程详细解析----条件变量 pthread_cond_t
    在Linux中使用线程
    关于verilog中语句可不可综合
    32位先行进位加法器的实现
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5764002.html
Copyright © 2011-2022 走看看