2014-04-03 编码分组打印(推理思维腾讯题)

题目:

腾讯:五笔的编码范围是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哈哈~


你可能感兴趣的:(2014-04-03 编码分组打印(推理思维腾讯题))