import java.util.ArrayList;
import java.util.List;
//
*
给一个数字串,比如12259,映射到字母数组,比如,1 -> a, 2->
b,... , 12 -> l ,... 26-> z。
* 那么,12259
-> lyi 或 abbei 或 lbei 或 abyi等等。
*
输入一个数字串,判断是否能转换成字符串,如果能,则打印所以有可能的转换成的字符串。
*
*不合法的情况应该是第一个数是0或者中间有连续0出现
*思路比较简单就是,总体而言是f(n)=f(n-1)+f(n-2),但是其中有很多细节需要考虑
*用递归的方式
//
public class Nums2Chars {
List l=new ArrayList();
char[]map={'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'};
public ArrayList func(int
[]Array,int start, int end){
ArrayList results=new
ArrayList();
if(start>end)
return null;
//处理单个元素
if(start==end)
{
if(Array[start]==0)
{
System.out.println("illeagle");
return null;
}
else
{
String sub=null;
sub=String.valueOf(map[Array[start]-1]);
results.add(sub);
return results;
}
}
if(Array[start+1]!=0)
{
ArrayList subResults = func(Array,
start+1, end);
if(subResults!=null
&&!subResults.isEmpty())
{
for(int i=0;i
{
String
str=String.valueOf(map[Array[start]-1])+subResults.get(i);
subResults.set(i, str);
}
}
results.addAll(subResults);
if(Array[start]*10+Array[start+1]<=26)
{
ArrayList subResults2=
func(Array,start+2,end);
if(subResults2!=null
&& !subResults2.isEmpty())
{
for(int i=0;i
{
String str=subResults2.get(i);
str=String.valueOf(map[Array[start]*10+Array[start+1]-1])+str;
subResults2.set(i,str);
}
results.addAll(subResults2);
}else
{
results.add(String.valueOf(map[Array[start]*10+Array[start+1]-1]));
}
}
return results;
}
else
{
if(start+2>=end)
{
ArrayList subResults2=
func(Array,start+2,end);
if(subResults2!=null
&& !subResults2.isEmpty())
{
for(int i=0;i
{
String
str=String.valueOf(map[Array[start]*10+Array[start+1]-1])+subResults2.get(i);
subResults2.set(i,str);
}
results.addAll(subResults2);
}
}
else
{
String
str=String.valueOf(map[Array[start]*10+Array[start+1]-1]);
results.add(str);
}
return results;
}
//return null;
}
public static void main(String[]
args) {
// TODO Auto-generated method
stub
Nums2Chars demo = new
Nums2Chars();
int Array[] = {1,2,2,5,9};
ArrayList demos=demo.func(Array, 0,
Array.length-1);
for(int i=0;i
{
System.out.println(demos.get(i));
}
}
}