题目链接
简单dfs
用到了hashmap,list
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
public static String n;
public static int len;
public static Map<String,String> map=new HashMap<String,String>();
public static List<String> list, res;
public static int dx[]={-1,1,0,0};
public static int dy[]={0,0,-1,1};
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
map.put("2","ABC");
map.put("3","DEF");
map.put("4","GHI");
map.put("5","JKL");
map.put("6","MNO");
map.put("7","PRS");
map.put("8","TUV");
map.put("9","WXY");
n=sc.nextLine();
len=n.length();
list=new ArrayList<String>();
res=new ArrayList<String>();
for(int i=0;i<4617;i++){
String s=sc.nextLine();
if(s.length()==len) //直接加入会爆掉三个点
list.add(s);
}
dfs(0,new StringBuffer());
for(int i=0;i<res.size();i++)
System.out.println(res.get(i));
if(res.size()==0)
System.out.println("NONE");
}
public static void dfs(int cur,StringBuffer sb){
if(cur==len){
if(list.contains(sb.toString())){
res.add(sb.toString());
}
return;
}
String c=n.charAt(cur)+"";
for(int i=0;i<3;i++){
sb.append(map.get(c).charAt(i));
dfs(cur+1,sb);
sb.deleteCharAt(sb.length()-1);
}
}
}