leetcode 17 电话号码

通过迭代方法
数组赋值的时候需要注意。

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if len(digits)==0:
            return []
        hashmap=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']

        alpha=[]
        for i in digits:
            alpha.append(hashmap[int(i)])


        res=[]
        result=[]


        for i in range(len(alpha[0])):
            res.append(alpha[0][i])
        for item in alpha[1:]:

            for t in item:
                result+=[num+t for num in res]
            #print(result)
            res[:]=result[:]
            result[:]=[]
            #print(res)

        return res

递归的方法
其中将每一个数字对应的字母看成递归树的一层

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if len(digits)==0:
            return []
        hashmap=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']

        def dfs(i,path,result):

            if i == len(digits):
                result.append(path[:])
                return 
            hashnode=hashmap[int(digits[i])]
            for j in range(len(hashnode)):

                dfs(i+1,path+hashnode[j],result)

        result=[]
        dfs(0,'',result)
        return result

队列的方法,初始化时将queue中放置一个空字符串,然后每次循环以队列的长度,因为那是上轮的结果的数量(数组长度)

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if len(digits)==0:
            return []
        hashmap=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
        queue=['']        

        for i in range(len(digits)): 
            for _ in range(len(queue)):
                s=queue[0]
                queue[:]=queue[1:]           
                for j in hashmap[int(digits[i])]:

                    queue.append(s+j)

        return queue

这里放一个其他题解的方法,使用递归,也可以把digits对应的字母设置为数组形式,然后最后递归记录(返回)结果的时候,通过"".join()

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:
            return list()

        phoneMap = {
            "2": "abc",
            "3": "def",
            "4": "ghi",
            "5": "jkl",
            "6": "mno",
            "7": "pqrs",
            "8": "tuv",
            "9": "wxyz",
        }

        def backtrack(index: int):
            if index == len(digits):
                combinations.append("".join(combination))
            else:
                digit = digits[index]
                for letter in phoneMap[digit]:
                    combination.append(letter)
                    backtrack(index + 1)
                    combination.pop()

        combination = list()
        combinations = list()
        backtrack(0)
        return combinations

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/dian-hua-hao-ma-de-zi-mu-zu-he-by-leetcode-solutio/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
全部评论

相关推荐

01-07 07:54
已编辑
门头沟学院 前端工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务