/**
* 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,
* 形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …,
* yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。
* 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.
*/
分析如下图:
代码如下
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(encode(s));
}
public static int encode(String s){
int index = 0;
int[] factor = {25*25*25+25*25+25+1,25*25+25+1,25+1,1};
for(int i = 0; i < s.length();i++) {
index = index + (s.charAt(i)-'a')*factor[i]+1;
}
return index-1;
}
}
我们知道了怎样编码,那么相应的我们也可以利用这个数组进行解码,只需要用%来判断。
public static void unencode(int index){
String s = null;
int[] factor = {25*25*25+25*25+25+1,25*25+25+1,25+1,1};
int i = 0;
int[] data = new int[4];
while(index > 0){
/**
* 记录四层中的每层的层数
*/
data[i] = index/factor[i];
/**
* 计算去掉这层之后剩下的索引数
*/
index = index%factor[i]-1;
i++;
}
for(int j = 0; j < data.length;j++) {
/**
* 输出
*/
System.out.print((char) ('a'+data[j]));
}
}