一个典型的电话拨号盘 拨号算距离问题

题目如下:

一个典型的电话拨号盘如下:

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

 

这个题就是一个道曼哈顿距离问题。

但是我用python简单实现为

 

import sys
line = sys.stdin.readline().strip()

call={'1': (1, 1),
      '2': (1, 2),
      '3': (1, 3),
      '4': (2, 1),
      '5': (2, 2),
      '6': (2, 3),
      '7': (3, 1),
      '8': (3, 2),
      '9': (3, 3),
      '*': (4, 1),
      '0': (4, 2),
      '#': (4, 3),
      }

org = '5'

o_l = call.get(org)[0]
o_r = call.get(org)[1]

ll = 0

for d in line:
    t_l = call.get(d)[0]
    t_r = call.get(d)[1]

    ll += (abs(o_l-t_l) + abs(o_r - t_r))

    o_l = call.get(d)[0]
    o_r = call.get(d)[1]

print ll

 

你可能感兴趣的:(面试)