字典= {1:' A',2:' B',3:' C&#39,4:' d' .........,26:' z' }
实施例。 123可以转换为:" abc"(1 - ' a',2 - ' b',3 - ' c'); " AW" (1 - ' a',23 - ' w'); " LC" (12 - '升',3 - ' C&#39)
可以轻松获得递归解决方案
public class google {
public static void googly(int a){
String dict[] ={"","a","b","c","d","e","f","g","h","i","j","k","l",
"m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String s=""; // to store the possible combinations
StringBuilder N= new StringBuilder(Integer.toString(a)); // for easier access to numbers
printstr(dict,0,N,s);
}
/* pos- current position in N
res- store possible combinations */
private static void printstr(String[] dict,int pos,StringBuilder N,String res) {
// print if all the elements in N are done
if(pos==N.length()){
System.out.println(res);
return;
}
// consider only one element at position pos in N
printstr(dict,pos+1,N,res+dict[Integer.parseInt(N.substring(pos, pos+1))]);
// consider next two elements if present and have a value in dict
if(pos+1<N.length()){
int a=Integer.parseInt(N.substring(pos,pos+2));
if(a<26)
printstr(dict,pos+2,N,res+dict[a]);
}
}
public static void main(String[] args){
google.googly(123);
}
}
但我无法找到使用动态编程的解决方案。
答案 0 :(得分:0)
这是一个递归解决方案。我无法想出一个需要记忆(动态编程)解决方案的数字......在问题中我不清楚零会发生什么,所以我只是把它弄为空白而且必须考虑到为此单独。
import java.util.ArrayList;
import java.util.HashMap;
public class Main {
static HashMap<Integer, String> INT_MAP = new HashMap<Integer, String>() {{
put(0 , "");
put(1 , "a");
put(2 , "b");
put(3 , "c");
put(4 , "d");
put(5 , "e");
put(6 , "f");
put(7 , "g");
put(8 , "h");
put(9 , "i");
put(10, "j");
put(11, "k");
put(12, "l");
put(13, "m");
put(14, "n");
put(15, "o");
put(16, "p");
put(17, "q");
put(18, "r");
put(19, "s");
put(20, "t");
put(21, "u");
put(22, "v");
put(23, "w");
put(24, "x");
put(25, "y");
put(26, "z");
}};
public static void main(String[] args) {
String num = Integer.toString(123);
ArrayList<String> strings = new ArrayList<String>();
getString(num, 0, num.length(), strings);
for (String s : strings) {
System.out.println(s);
}
}
public static void getString(String s, int start, int end, ArrayList<String> strings) {
if (end <= start) {
strings.add(s);
return;
}
// Convert first two numbers
if (end-start >= 2) {
String subStr = s.substring(start, start+2);
int i = Integer.parseInt(subStr);
if (i <= 26) {
StringBuilder next = new StringBuilder(s.substring(0, start));
String alpha = INT_MAP.get(i);
next.append(alpha);
if (start + 2 <= end) {
next.append(s.substring(start + 2, end));
}
if (i == 0 && alpha.length() == 0) {
getString(next.toString(), start, end - 2, strings);
} else {
getString(next.toString(), start + 1, end - 1, strings);
}
}
}
// Convert first number
int i = Integer.parseInt("" + s.charAt(start));
StringBuilder next = new StringBuilder(s.substring(0, start));
String alpha = INT_MAP.get(i);
next.append(alpha);
if (start + 1 <= end) {
next.append(s.substring(start + 1, end));
}
if (i == 0 && alpha.length() == 0) {
getString(next.toString(), start, end - 1, strings);
} else {
getString(next.toString(), start + 1, end, strings);
}
}
}
适合我。警告,未经过广泛测试。 - https://repl.it/BSTm/1