91.解碼方法

這個題不算是一個常規(guī)套路的題踪栋,我們需要分析一下

假設(shè)我們要求的數(shù)是2荷愕,其方式顯然只有一種

假設(shè)我們要求的數(shù)是22
1.由 null + 22組成
2.由2 + 2組成
這個地方有一點(diǎn)需要注意涛舍,加號后的數(shù)應(yīng)被看作為一個整體,是不可拆分的。也就是說,這里的22不能被拆分
加號前的數(shù)是已經(jīng)計算過的人芽,直接取值就可以,也不需要再去拆分

假設(shè)我們要求的數(shù)是226
1.由null + 226組成(這是不可能的绩脆,因?yàn)槿≈捣秶?-26)
2.由2 + 26組成(可以看到2和26我們之前都計算過了)
3.由22 + 6組成(可以看到22和6我們之前都計算過了)

現(xiàn)在我們可以歸納出動態(tài)方程了 當(dāng)前的解碼方法數(shù) = 去掉前一位的解碼方法書 + 去掉前兩位的解碼方法數(shù)
dp[i] = dp[i - 1] + dp[i - 2]
dp[0] = 1 拆分成null和自身 null的方法數(shù)為1
dp[1] = 1

除此之外 我們還需要考慮0的問題萤厅,具體見代碼

class Solution {
    public int numDecodings(String s) {
        int len = s.length();
        /** 處理0 */
        //如果有兩0相連 肯定不行
        for (int i = 1; i < len; i ++) {
            if (s.charAt(i - 1) == '0' && s.charAt(i) == '0')
                return 0;
        }
        //如果開頭是0肯定不行
        if (s.charAt(0) == '0')
            return 0;
        //若果結(jié)尾是0 則只剩一種情況

        int[] dp = new int[len + 1];
        //當(dāng)前字符串s可能是從 s - 2 或 s - 1 添加一位或者兩位數(shù)得到的(1-26 只能添加1位或者2位 不可能添加0位或者三位及以上)
        //dp[i] = dp[i - 2] + dp[i - 1]

        /** base case */
        dp[0] = 1; // dp[0]代表分解成null和整體 22可以分解成 2 + 2 或者 null + 22
        dp[1] = 1;

        /** dp i代表幾個字符 即s[i - 1]個字符 */
        for (int i = 2; i <= len; i ++) {
            if (Integer.parseInt(s.substring(i - 2,i)) > 26 || s.charAt(i - 2) == '0') { //如果最后兩位是>26的 或倒數(shù)第二位是0 那么這個s只能由s - 1加一位組成
                if (s.charAt(i - 1) == '0') //如果果結(jié)尾是0 則s-1的情況也無法滿足
                    return 0;
                else
                    dp[i] = dp[i - 1];
            }
            else {
                if (s.charAt(i - 1) == '0') //如果果結(jié)尾是0 則s-1的情況無法滿足
                    dp[i] = dp[i - 2];
                else
                    dp[i] = dp[i - 2] + dp[i - 1];
            }
        }

        return dp[len];
    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末橄抹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祈坠,更是在濱河造成了極大的恐慌害碾,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赦拘,死亡現(xiàn)場離奇詭異,居然都是意外死亡芬沉,警方通過查閱死者的電腦和手機(jī)躺同,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丸逸,“玉大人蹋艺,你說我怎么就攤上這事』聘眨” “怎么了捎谨?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長憔维。 經(jīng)常有香客問我涛救,道長,這世上最難降的妖魔是什么业扒? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任检吆,我火速辦了婚禮,結(jié)果婚禮上程储,老公的妹妹穿的比我還像新娘蹭沛。我一直安慰自己,他們只是感情好章鲤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布摊灭。 她就那樣靜靜地躺著,像睡著了一般败徊。 火紅的嫁衣襯著肌膚如雪帚呼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天集嵌,我揣著相機(jī)與錄音萝挤,去河邊找鬼。 笑死根欧,一個胖子當(dāng)著我的面吹牛怜珍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤粗,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼酥泛,長吁一口氣:“原來是場噩夢啊……” “哼今豆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柔袁,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呆躲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捶索,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體插掂,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年腥例,在試婚紗的時候發(fā)現(xiàn)自己被綠了辅甥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡燎竖,死狀恐怖璃弄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情构回,我是刑警寧澤夏块,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站纤掸,受9級特大地震影響脐供,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茁肠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一患民、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垦梆,春花似錦匹颤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至京腥,卻和暖如春赦肃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背公浪。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工他宛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欠气。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓厅各,卻偏偏與公主長得像,于是被迫代替她去往敵國和親预柒。 傳聞我的和親對象是個殘疾皇子队塘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359