/* * 91. Decode Ways * 12.20 by Mingyang * 题意解析:给你一串数字,解码成英文字母。 * 类似爬楼梯问题,但要加很多限制条件。 * 定义数组number,number[i]意味着:字符串s[0..i-1]可以有number[i]种解码方法。 * 回想爬楼梯问题一样,number[i] = number[i-1] + number[i-2] * 但不同的是本题有多种限制: * 第一: s[i-1]不能是0,如果s[i-1]是0的话,number[i]就只能等于number[i-2]---末尾数字不能为0 * 比如说110的数量和1是一样的(少两个) * 第二,s[i-2,i-1]中Integer.parseInt(s.substring(i-2,i))获得的整数必须在10到26之间。 */
public int numDecodings(String s) { if(s == null || s.length() == 0) { return 0; } int n = s.length(); int[] dp = new int[n+1]; dp[0] = 1; dp[1] = s.charAt(0) != '0' ? 1 : 0; for(int i = 2; i <= n; i++) { int first = Integer.valueOf(s.substring(i-1, i)); int second = Integer.valueOf(s.substring(i-2, i)); if(first >= 1 && first <= 9) { dp[i] += dp[i-1]; } if(second >= 10 && second <= 26) { dp[i] += dp[i-2]; } } return dp[n]; }