尝试做了第二题,上午做了一个多小时,现在功能已经实现,主要原理是采用递归实现的。
详细代码如下:
import java.util.ArrayList;
import java.util.List;
public class Test2 {
private static String message="";
static List<String> list=new ArrayList<String>();//这里我只是把功能实现了,至于其它的,接收字符串,还有验证是否是正确的数字及长度
private static int counts=0; //只有留给调用此方法的人去做了
public static void main(String[] args){
String s="327523";
System.out.println("总共有:"+method(s)+"条信息"); //调用方法并返回行数
}
public static int method(String str){
if(str.length()>0){ //用于判断递归后的字符串长度,不能为0
char[] a0={'0'}; //以下为对应的各个数字中的字母 其中0和1只认为有0这个字符
char[] a1={'0'};
char[] a2={'a','b','c'};
char[] a3={'d','e','f'};
char[] a4={'g','h','i'};
char[] a5={'j','k','l'};
char[] a6={'m','n','o'};
char[] a7={'p','q','r','s'};
char[] a8={'t','u','v'};
char[] a9={'w','x','y','z'};
if(str.charAt(0)==48){ //str.charAt(0)方法判断首字母是0~9之中的哪一个,因为根据ascii表,0是49,9是57
for(int i=0;i<a0.length;i++){ //根据如果是0 则为数组a0,根据数组长度判断循环次数
message+=a0[i]; //将0对应的字符添加到字符串message末尾
list.add(message); //全部添加到list集合中,最后再来排除不够长度的
method(new String(str).substring(1,str.length())); //递归,此题的主要原理就用的这个
message=message.substring(0,message.length()-1 ); //递归后,message要减去新添加的那个字符
}
}
else if(str.charAt(0)==49){ //其它的以此判断是否是1,2,3,4,5,6,7,8,9..后面注释省略
for(int i=0;i<a1.length;i++){ //虽然这样有些繁琐,但是鄙人才疏学浅,暂时没有想到其它方法 switch应该也行
message+=a1[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==50){
for(int i=0;i<a2.length;i++){
message+=a2[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==51){
for(int i=0;i<a3.length;i++){
message+=a3[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==52){
for(int i=0;i<a4.length;i++){
message+=a4[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==53){
for(int i=0;i<a5.length;i++){
message+=a5[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==54){
for(int i=0;i<a6.length;i++){
message+=a6[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==55){
for(int i=0;i<a7.length;i++){
message+=a7[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==56){
for(int i=0;i<a8.length;i++){
message+=a8[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
else if(str.charAt(0)==57){
for(int i=0;i<a9.length;i++){
message+=a9[i];
list.add(message);
method(new String(str).substring(1,str.length()));
message=message.substring(0,message.length()-1 );
}
}
String[] strings=list.toArray(new String[list.size()]); //把list赋值给String【】
int count=strings[0].length(); //count用来判断list中的最大长度
for(int i=0;i<strings.length;i++){
if(strings[i].length()>count)
count=strings[i].length();
}
for(int i=0;i<strings.length;i++){ //必须等于最大长度且等于字符串长度的才是合格的字符串
if(strings[i].length()==count&&count==str.length()){
System.out.println(strings[i]);
counts=counts+1; //类中的静态变量,用来统计合格字符的个数,以便返回
}
}
}
return counts; //返回信息条数
}
}
PS:上面做的可能不尽完善,如有不足还欢迎各位指出 |