題目描述:
一條包含字母A-Z的消息通過以下映射進行了編碼
1-A
......
26-Z
要特別注意,11106可以映射為AAJF或KJF
06不是一個合法編碼
給你一個只含數字的非空字符串s,請計算并返回解碼方法的總數。如果沒有合法的方法解碼整個字符串,返回0
示例1:
輸入:s = "12" 輸出:2 解釋:它可以解碼為 "AB"(1 2)或者 "L"(12)。
示例2:
輸入:s = "226" 輸出:3 解釋:它可以解碼為 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
示例3:
輸入:s = "06" 輸出:0 解釋:"06" 無法映射到 "F" ,因為存在前導零("6" 和 "06" 并不等價)。
提示:
1 <= s.length <= 100 s 只包含數字,并且可能包含前導零。
解題方法:
動態規劃,分為一個字符和兩個字符兩種情況
int numDecodings(char* s) {int n = strlen(s);int f[n+1];memset(f,0,sizeof(f));//f數組全部設置為0f[0]=1;for(int i=1;i<=n;i++){//一種字符情況if(s[i-1]!='0') f[i] = f[i] + f[i-1];//兩種字符情況if(i>1 && s[i-2]!='0' && (s[i-2]-'0')*10+s[i-1]-'0'<=26)//以226為例好理解點f[i] = f[i]+f[i-2];}return f[n]; }