LeetCode 91 [Decode Ways]

原題

有一個消息包含A-Z通過以下規(guī)則編碼

'A' -> 1
'B' -> 2
...
'Z' -> 26

現(xiàn)在給你一個加密過后的消息颗圣,問有幾種解碼的方式

樣例
給你的消息為12,有兩種方式解碼 AB(12) 或者 L(12). 所以返回 2

解題思路

  • 求有幾種解碼方式而不是具體每種解碼方式是什么 - 動態(tài)規(guī)劃 - Sequence DP
  • cache[i]表示以第i個字符結(jié)尾的字符串有幾種解碼方式
  • 初始化
  • cache[0] = 1 空字符串認(rèn)為有是一種解碼方式
  • cache[1] = 1 一個字符肯定只有一種解法方式 (最開始記得判斷第一個字符是0返回0種解碼方式)
  • 狀態(tài)轉(zhuǎn)移方程,cache[i] 要考慮和上一位組成的數(shù)字具體是多少
  • 如果是00,30舌菜,40萌壳,50亦镶,60,70袱瓮,80缤骨,90 => cache[i] = 0 (無解) s[i - 1]如果是0要仔細(xì)考慮
  • 如果是01~09,比如尺借,1501 => 150有幾種解(因為0單獨不會有解)
  • 如果是10~26其中不包括10绊起,20的話,則有兩種情況燎斩,比如1512 => 15有幾種解(L) + 151有幾種解(B)
  • 如果等于10或者20虱歪,比如,1510 => 15有幾種解(因為0單獨不會有解, J(10)/T(20))
  • 如果大于26栅表,比如笋鄙,1527 => 152有幾種解

完整代碼

class Solution(object):
    def numDecodings(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s or s[0] == "0":
            return 0
            
        cache = [0 for i in range(len(s) + 1)]
        cache[0] = cache[1] = 1
        for i in range(2, len(s) + 1):
            num = int(s[i-2:i])
            if num == 0 or (s[i - 1] == "0" and num > 26): # 100 or 130
                cache[i] = 0
            elif num < 10: # 109
                cache[i] = cache[i - 1]
            elif num < 27: 
                if num == 10 or num == 20: # 110 or 120
                    cache[i] = cache[i - 2]
                else: # 117, 126 ...
                    cache[i] = cache[i - 1] + cache[i - 2]
            else: # 127, 178
                cache[i] = cache[i - 1]
                
        return cache[len(s)]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怪瓶,隨后出現(xiàn)的幾起案子萧落,更是在濱河造成了極大的恐慌,老刑警劉巖洗贰,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件找岖,死亡現(xiàn)場離奇詭異,居然都是意外死亡敛滋,警方通過查閱死者的電腦和手機许布,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绎晃,“玉大人蜜唾,你說我怎么就攤上這事帖旨。” “怎么了灵妨?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵解阅,是天一觀的道長。 經(jīng)常有香客問我泌霍,道長货抄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任朱转,我火速辦了婚禮蟹地,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘藤为。我一直安慰自己怪与,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布缅疟。 她就那樣靜靜地躺著分别,像睡著了一般。 火紅的嫁衣襯著肌膚如雪存淫。 梳的紋絲不亂的頭發(fā)上耘斩,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音桅咆,去河邊找鬼括授。 笑死,一個胖子當(dāng)著我的面吹牛岩饼,可吹牛的內(nèi)容都是我干的荚虚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼籍茧,長吁一口氣:“原來是場噩夢啊……” “哼版述!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硕糊,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤院水,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后简十,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檬某,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年螟蝙,在試婚紗的時候發(fā)現(xiàn)自己被綠了恢恼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡胰默,死狀恐怖场斑,靈堂內(nèi)的尸體忽然破棺而出漓踢,到底是詐尸還是另有隱情,我是刑警寧澤漏隐,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布喧半,位于F島的核電站,受9級特大地震影響青责,放射性物質(zhì)發(fā)生泄漏挺据。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一脖隶、第九天 我趴在偏房一處隱蔽的房頂上張望扁耐。 院中可真熱鬧,春花似錦产阱、人聲如沸婉称。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽王暗。三九已至,卻和暖如春怎燥,著一層夾襖步出監(jiān)牢的瞬間瘫筐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工铐姚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肛捍。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓隐绵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拙毫。 傳聞我的和親對象是個殘疾皇子依许,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • A message containing letters from A-Z is being encoded to...
    ShutLove閱讀 413評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)缀蹄,斷路器峭跳,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 題目 A message containing letters from A-Z is being encoded...
    persistent100閱讀 507評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法缺前,內(nèi)部類的語法蛀醉,繼承相關(guān)的語法,異常的語法衅码,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • LeetCode 91 Decode Ways A message containing letters from...
    ShuiLocked閱讀 1,172評論 1 0