题目:
腾讯:五笔的编码范围是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,以此类推。
1)编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index;
2)编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。
思想:
一组以a为开头的编码如下:
a aa aaa aaaa aaab aaac......aaay
aab aaba aabb aabc.....aaby
...............
aay aaya aayb...............aayy
ab aba abaa ..................................
首先,我们并不需要计算出所有的编码,然后查找,效率极低,本思想其实就是建立多级索引,采用分组的思想来解决:4个字母的编码每隔25次将出现一次3个字母的编码,3个字母的编码每隔(25+1)*25次出现一次2个字母的编码,2个字母的编码每隔((25+1)*25+1)*25次出现一次1个字母的编码,因此可反推出每隔组编码的间隔。首先用四个值来计算出,每组编码的间隔值。当输入任意编码时,依次根据每一个字母,算出组位置,然后相加;当输入任意索引时,将索引进行循环拆分,进行求解;
程序实现:
较简单,不实现,O(∩_∩)O哈哈~