测开笔试题
某厂笔试题:
执行时限1000ms
一个典型的电话拨号盘如下:
1 2 3
4 5 6
7 8 9
** 0 #
手指在两个按键之间的移动距离被定义为这两个键的x、y坐标差的绝对值之和。
比如:6到自身的距离是0,到3、5、9键的距离是1,到2、4、8、#键的距离是2,
到1、7、0键的距离是3,到*键的距离是4。
现在要你算一下:拨打一个电话号码手指所需要移动的最小距离是多少?
假设,手指的初始位置是在“5”键上。
输入:
一行,一个字符串,表示需要拨打的电话号码。
输入约束:
电话号码的每一位仅包含数字0到9,且总长度范围是[3,20]
输出:
一个整数,表示拨完整个号码,手指所需要移动的最小距离。
例子:输入 911
输出 6
解题过程:
例子分析: 输入911,手指经过的键是5–>9–>1–>1,其中5–>9的最小距离是2,9–>1的最小距离是4,1–>1的最小距离是0,因此结果是2+4+0=6。
算法:
1、初始化一个电话盘一样的二维列表;
2、根据二维列表,生成一个字典,电话盘中的每个键值是key,
键值在二维列表中的坐标[x轴,y轴]是value;
3、遍历电话号码ÿ