package 左神题目; import java.util.Scanner; /**规定1和A对应、2和B对应、3和C对应. 那么一个数字字符串比如“111",就可以转化为"AAA”、"KA”和"AK”。 给定一个只有数字字符组成的字符串str,返回有多少种转化结果。*/ public class 数字和字母转换 { //i之前的位置,如何转化已经做过决定了 //i。。。有多少种转化的结果 public static int process(char[] str,int i) { if(i==str.length) { return 1; } //因为该位置是0就没有对应的字母 if(str[i]=='0') { return 0; } if(str[i]=='1') { int res=process(str,i+1);//i自己作为单独的部分,后续有多少种方法 if(i+1<str.length) { res+=process(str,i+2);//(i和i+1)作为单独的部分,后续有多少种方法 } return res; } if(str[i]=='2') { int res = process(str, i + 1);//i自己作为单独的部分,后续有多少种方法 //(i和i+1)作为单独部分并且没有超过26,后续有多少种方法 if (i + 1 < str.length && (str[i + 1] >= '0' && str[i + 1] <= '6')) { res += process(str, i + 2); } return res; } //因为该字母大于>2,所以不可能组合 return process(str,i+1); } public static void main(String[] args) { Scanner input = new Scanner(System.in); char[] str = input.next().toCharArray(); System.out.println(process(str,0)); } }
那么一个数字字符串比如“111“,就可以转化为“AAA”、“KA”和“AK”。
于 2022-03-22 17:14:07 首次发布