1、编码题
假定一种编码的编码范围是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.
解题逻辑:画出编码逻辑图如下图:
计算出相邻2个同位数编码之间的距离,保存于base数组中:
base[3] = 1, 即aaaa与aaab之间相隔;base[2] = base[3]*25+1,即aaa与aab之间相隔;base[1] = 25*base[2] + 1,即 aa与ab之间相隔;base[0] = 25*base[1]+1,即a与b之间相隔。
例如:baca:
1)找出b的位置,即与a之间的距离 d1 = ('b' - 'a') * base[0] +1;
2)找出ba的位置,即与ba之间的距离 d2 = ('a' - 'a') * base[1] +1;
3)找出bac的位置,即与baa之间的距离 d3 = ('c' - 'a') * base[2] +1;
4)找出baca的位置,即与baca之间的距离 d4 = ('b' - 'a') * base[3] +1;
5)算出Index = d1 + d2 + d3 + d4 - 1; //减1是因为编码从零开始计数
关键代码段: