腾讯笔试题

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是因为编码从零开始计数

关键代码段:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值