题目描述
我们来做一个简单的密码破译游戏。破译的规则很简单,将数字转换为字母,1转化为a,2转化为b,依此类推,26转化为Z。现在输入的密码是一串数字,输出的破译结果是该数字串通过转换规则所能产生的所有字符串。
输入
多行数据,每行为一个数字串。
输出
我们来做一个简单的密码破译游戏。破译的规则很简单,将数字转换为字母,1转化为a,2转化为b,依此类推,26转化为Z。现在输入的密码是一串数字,输出的破译结果是该数字串通过转换规则所能产生的所有字符串。
输入
多行数据,每行为一个数字串。
输出
多行数据,每行对应输出通过数字串破译得到的所有字符串,并按照字符串顺序排列,字符串之间用单个空格分隔。每行开头和结尾不允许有多余的空格。
总体思路,用递归算法,把长字符串变成短字符串,直到长度为2或1为止
package view; import java.util.Scanner; public class Test { String output = ""; int asc=(int)'a'-1; public String f1(String string,String temp) { if(string.length()==1) { output+=temp+(char)(asc+Integer.parseInt(string))+" "; return string; } temp += (char)(asc+Integer.parseInt(string.substring(0,1))); // temp += string.substring(0,1)+","; f1(string.substring(1,string.length()),temp); f2(string.substring(1,string.length()),temp); return string.substring(0,1); } public String f2(String string,String temp) { if(string.length()==2) { if(Integer.parseInt(string)>26){ return ""; } output+=temp+(char)(asc+Integer.parseInt(string))+" "; return string; } if(string.length()<2) { return ""; } if(Integer.parseInt(string.substring(0,2))>26){ return ""; } temp += (char)(asc+Integer.parseInt(string.substring(0,2))); // temp += string.substring(0,2)+","; f1(string.substring(2,string.length()),temp); f2(string.substring(2,string.length()),temp); return string.substring(0,2); } public static void main(String[] args){ Test test =new Test(); Scanner input = new Scanner(System.in); // for(;;) { String string = input.nextLine(); String temp=""; test.output = ""; test.f1(string,temp); test.f2(string,temp); System.out.println(test.output.trim()); // } } }