题目描述
有一种将字母编码成数字的方式:’a’->1,’b’->2,…,’z’->26。现在给一串数字,给出有多少种可能的译码结果。
输入描述
编码后数字串
输出描述
可能的译码结果数
示例1
输入
12
输出
2
示例2
输入
31717126241541717
输出
192
这里的想法是采用递归的思路,一个字符串判断前两位,有以下几种情况:
- 第一个数字是1。此时存在第一个数字独立或者跟第二个数字合并的情况。分别将剩余数字向下一层递归。
- 第一个数字是2。此时如果第二个数字<=6,跟情况1相同;如果>6,则第一个数字不能和第二个合并,将除了第一个的剩余数字向下一层递归。
- 第一个数字比2大,此时第一个数字只能独立,剩余数字传递到下一层。
这样层层递归判断,直到剩余0个或者1个数字时候,完成一种情况,计数器加1。
但是通过率只有40%,可能哪里没有考虑,暂时还没有发现问题在哪里。下面是通过率只有40%的代码:
import java.util.Scanner;
public class Main {
public static int count=0;
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
counts(sc.nextLine());
System.out.println(count);
}
public static void counts(String temp) {
int len = temp.length();
if(len==0||len==1){
count++;
return;
}
int a = Integer.parseInt(temp.substring(0, 1));
int b = Integer.parseInt(temp.substring(1, 2));
if (a == 1) {
counts(temp.substring(2, len));
counts(temp.substring(1, len));
}else if(a==2){
if(b<=6){
counts(temp.substring(2, len));
counts(temp.substring(1, len));
}else{
counts(temp.substring(1, len));
}
}else {
counts(temp.substring(1, len));
}
}
}