import java.util.*; public class Solution { /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ public int solve (String nums) { if(nums == null || nums.length() == 0) { return 0 ; } //预处理,出去前导零 int index = 0 ; //第一个不为零的字符的索引 for( ; index < nums.length() ; index ++) { if(nums.charAt(index) != '0') { break ; } } nums = nums.substring(index) ; if(nums.length() == 0) return 0 ; if(nums.length() == 1) return 1 ; int f[] = new int[nums.length()+1] ;//f[i]表示前i个数字可能的结果 f[0] = 1 ; f[1] = 1 ; //转移方程:f[i] = [f[i-1],nums[i-1]能表示一个字母] + [f[i-2],nums[i-1,i-2]能表示一位字母] for(int i = 2 ; i < f.length ; i++) { String lastnumStr = nums.substring(i-1,i) ; int lastnum = Integer.parseInt(lastnumStr) ; if(lastnum > 0) {//最后一个数字能代表一个字母 f[i] += f[i-1] ; } lastnumStr = nums.substring(i-2,i) ; lastnum = Integer.parseInt(lastnumStr) ; if(lastnum >=10 && lastnum <= 26) {//如果最后两个数字能代表一个字母 f[i] += f[i-2] ; } } return f[nums.length()] ; } }