题目链接:https://leetcode.com/problems/decode-ways/
题目:
A-Z
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
"12"
思路:
类似于爬楼梯题目。
算法:
public int numDecodings(String s) {
if (s.length() == 0)
return 0;
char sc[] = s.toCharArray();
if (sc[0] == '0')
return 0;
int c[] = new int[s.length()];
c[0] = 1;
for (int i = 1; i < sc.length; i++) {
if ((sc[i - 1] == '2' && sc[i] >= '1' && sc[i] <= '6') || (sc[i - 1] == '1' && sc[i] != '0')) {
if (i + 1 < sc.length && sc[i + 1] == '0') {
c[i] = c[i - 1];
} else if (i - 2 >= 0) {
c[i] = c[i - 1] + c[i - 2];// 类似爬楼梯题
} else {
c[i] = c[i - 1] + 1;
}
} else if (sc[i] == '0' && sc[i - 1] == '0') {
return 0;
} else if (sc[i] == '0' && sc[i - 1] > '2') {
return 0;
} else {
c[i] = c[i - 1];
}
}
return c[s.length() - 1];
}