@author: ZZQ

@software: PyCharm

@file: letterCombinations.py

@time: 2018/10/18 18:33

要求:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

2:abc; 3: def; 4:ghi; 5: jkl; 6: mno; 7: pqrs; 8: tuv; 9: wxyz

输入:"23"

输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

思路:先得出每隔数字代表的字母,然后两两合并再合并。(记录奇偶)

class Solution():
def __init__(self):
pass def numToLetter(self, num):
dict = {2: 'abc',
3: 'def',
4: "ghi",
5: "jkl",
6: "mno",
7: "pqrs",
8: "tuv",
9: "wxyz"
}
return dict[num] def combine(self, str1, str2):
len1 = len(str1)
len2 = len(str2)
combined = []
temp_str = ''
for i in range(len1):
for j in range(len2):
combined.append(temp_str+str1[i]+str2[j])
temp_str = ''
return combined def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if digits == "":
return []
length = len(digits)
letters = []
for i in range(length):
cur_num = int(digits[i])
cur_letter = self.numToLetter(cur_num)
letters.append(cur_letter)
if len(letters) == 1:
return [letters[0][t] for t in range(len(letters[0]))]
while len(letters) > 1:
cur_letters = []
if len(letters) % 2:
for i in range((len(letters) - 1) / 2):
cur_letters.append(self.combine(letters[i * 2], letters[i * 2 + 1]))
cur_letters.append(letters[len(letters)-1])
else:
for i in range(len(letters) / 2):
cur_letters.append(self.combine(letters[i * 2], letters[i * 2 + 1]))
letters = cur_letters
return letters[0] if __name__ == "__main__":
answer = Solution()
print answer.letterCombinations('2')
# print len(answer.letterCombinations('2345'))

Leetcode题库——17.电话号码的字母组合的更多相关文章

  1. Leetcode之回溯法专题-17. 电话号码的字母组合(Letter Combinations of a Phone Number)

    [Leetcode]17. 电话号码的字母组合(Letter Combinations of a Phone Number) 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组 ...

  2. Java实现 LeetCode 17 电话号码的字母组合

    17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23& ...

  3. leetcode题库

    leetcode题库 #题名题解通过率难度出现频率  1 两数之和     46.5%简单2 两数相加     35.5%中等3 无重复字符的最长子串     31.1%中等4 寻找两个有序数组的中位 ...

  4. leetcode(js)算法之17电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母 示例: 输入:"23" 输出:[" ...

  5. [LeetCode] 17. 电话号码的字母组合 ☆☆☆(回溯) ###

    描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23"输出:[&q ...

  6. [LeetCode] 17. 电话号码的字母组合(回溯)

    题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[& ...

  7. [LeetCode] 17. 电话号码的字母组合

    题目描述:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/ 题目描述: 给定一个仅包含数字 2-9 的字符 ...

  8. leetcode题目17.电话号码的字母组合(中等)

    题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23"输出: ...

  9. LeetCode 17. 电话号码的字母组合(Letter Combinations of a Phone Number)

    题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出: ...

随机推荐

  1. MySQL学习【第一篇介绍】

    一.数据库mysql的特点 1.首先数据库分为RDBMS(关系型数据库),和NOSQL(非关系型数据库),而我们的mysql则是RDBMS. 2.RDMS和NOSQL特点对比 RDBMS特点: (1) ...

  2. Disruptor时序调用

    接下来,我会对disruptor的设计和源码上进行讲解,先来一篇时序图,简单理解下disruptor的工作过程

  3. 机器学习练习(一)-使用jupyter notebook

    一个简单的分类机器学习练习,基于sklearn.sklearn是Python中的一个机器学习模块.它其中有数据.非常方便我们用它来训练机器学习的模型,和验证我们的想法.(官方网站:https://sc ...

  4. windows从0开始学golang--0--安装golang+git+自己写包

    windows下 1.安装golang 2.安装git(主要是go get 引用git上的包) 3.  使用默认安装生成的目录 pkg:包含包对象,编译好的库文件 src:包含 Go 源文件,注意:你 ...

  5. leetcode-53-Maximum Subarray(动态规划详解)

    题目描述: Given an integer array nums, find the contiguous subarray (containing at least one number) whi ...

  6. Firebird3基本使用

    解决C#无法访问的情况:1. 使用FirebirdSql.Data.FirebirdClient 5版本以上.2.修改Firebird.conf配置文件WireCrypt为Enabled#WireCr ...

  7. UOJ UR#9 App管理器

    题目传送门 题目大意大概就是给你一个混合图(既有有向边又有无向边),对于每条无向边,u-v,问删去u->v,或删去v->u那条可以使新图强连通.(保证数据有解). 这道题前几个数据点送分. ...

  8. 01- web应用与https协议

    1. import socket server = socket.socket() server.bind(("127.0.0.1", 8800)) server.listen(5 ...

  9. python并发编程之守护进程、互斥锁以及生产者和消费者模型

    一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...

  10. 菜鸟vimer成长记——第4.1章、通用插件

    简介 关于插件的分类,此系列只会简单的区分为通用插件和编程插件.通用插件的意思是,不基于任何编程语言都可以使用的插件.编程插件,是针对于编程习惯,或者说是针对于某种语言的插件. 计划中,是先把基本常用 ...