LeetCode17-電話號碼的字母組合
阿新 • • 發佈:2018-11-19
今天上午窩在宿舍看了一部電影——風語咒,一部國產動漫,你還別說,真的蠻好看的,除了人物形象的設計上還是有些幼稚,但總體來說,情節合理,主題感人。這是一部以感恩父母為主線的電影,說實話,看到後面這結局是我沒想到的,很感人,我幾乎要落淚了,推薦給大家看看。看了買不了吃虧,買不了上當。
還有就是,本來昨天外出去辛亥革命紀念館,由於沒穿秋褲,被凍成狗,所以今天汲取教訓穿了秋褲,可是來到實驗室,發現空調開暖氣了,空調開暖氣了,空調開暖氣了。現在只覺得雙腿像火在燒一樣,救救孩子吧!
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%以上的,還是不錯的。