LeetCode17-电话号码的字母组合
今天上午窝在宿舍看了一部电影——风语咒,一部国产动漫,你还别说,真的蛮好看的,除了人物形象的设计上还是有些幼稚,但总体来说,情节合理,主题感人。这是一部以感恩父母为主线的电影,说实话,看到后面这结局是我没想到的,很感人,我几乎要落泪了,推荐给大家看看。看了买不了吃亏,买不了上当。
还有就是,本来昨天外出去辛亥革命纪念馆,由于没穿秋裤,被冻成狗,所以今天汲取教训穿了秋裤,可是来到实验室,发现空调开暖气了,空调开暖气了,空调开暖气了。现在只觉得双腿像火在烧一样,救救孩子吧!
17-电话号码的字母组合
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
这一题是一道非常不错的题目,因为在考虑字母组合的时候,有些门道。我看网上的讲解很多人都是用递归的,但是大家知道,我是一个极其不喜欢用递归的,所以自己自创了一种方法,效果好像还不错的。
代码如下:
class Solution:
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if len(digits) == 0:
return []
str_list = self.int_to_string(digits)
result_list = []
result_list.extend(list(str_list[0]))
index = 1
while index < len(str_list):
cur_lisr = []
for start in result_list:
for end in str_list[index]:
cur_lisr.append(start+end)
result_list = cur_lisr
index += 1
return result_list
def int_to_string(self, digits):
int_list = list(digits)
all_str = 'abcdefghijklmno'
str_list = []
for index in range(len(int_list)):
int_num = int(int_list[index])
if 2 <= int_num <= 6:
start = (int_num - 2) * 3
end = start + 3
str_list.append(all_str[start: end])
if int_num == 7:
str_list.append('pqrs')
if int_num == 8:
str_list.append('tuv')
if int_num == 9:
str_list.append('wxyz')
return str_list
if __name__ == '__main__':
digits = '8923'
result = Solution().letterCombinations(digits)
print(result)
我执行了几次,执行效率都是在80%以上的,还是不错的。