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%以上的,还是不错的。

猜你喜欢

转载自blog.csdn.net/weixin_36431280/article/details/84200845