1. 程式人生 > >LeetCode17-電話號碼的字母組合

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