题⽬描述
有⼀种将字⺟编码成数字的⽅式:'a'->1, 'b->2', ... , 'z->26'。
现在给⼀串数字,返回有多少种可能的译码结果
示例1
输⼊:"12"
返回值:2
说明:2种可能的译码结果(”ab” 或”l”)
示例2
输⼊:"31717126241541717"
返回值:192
说明:192种可能的译码结果
仔细观察,就会发现上⾯的编码从 1 到 26,也就是可能⼀次译码使⽤是 1 位,也可能是⼀次译码⽤了 2位,⽐如 12 ,可以第⼀次⽤ 1,2 分开分别译码,也可以把 1,2 合并起来进⾏译码。
思路及解法
暴力递归
假设⼀个字符是S,第⼀次拆解就有两种情况,然后分别对后⾯的部分分别译码,使⽤递归即可:
[code]public class Solution46 { public int solve (String nums) { return recursion(nums.toCharArray(), 0); } public int recursion(char[] nums, int start){ if(start == nums.length){ return 1; } if(nums[start] == '0') return 0; // 使⽤⼀位字符译码 int count1 = recursion(nums,start+1); int count2 = 0; // 符合两位字符的译码 if((start < nums.length-1) && (nums[start] == '1' || (nums[start] == '2' &&nums[start+1] = 10 && twoDigits |