用Python访问街区的总距离
假设我们有一个代表城市街区的唯一字符串矩阵,另一个包含要访问的街区的字符串列表。如果我们位于块矩阵[0][0],则找到按顺序访问每个块所需的曼哈顿总距离。
所以,如果输入像
块=[H,B,C]
然后输出将是6,因为“h”是底部2个块(向南)和1块右侧(东),“b”是2个块向上(北),“c”是1块右侧(东)。
为了解决这个问题,我们将遵循以下步骤-
坐标:=具有键“开始”和值(0,0)的映射
对于垫子中的每一行,
将(row,col)插入到坐标中[mat[row,col]]
对于垫子中的每个col
dist:=0
通过在开头添加“开始”来更新块
对于0到块-1大小的i,执行
c1:=坐标[blocks[i]]
c2:=坐标[blocks[i+1]]
d:=|c1[0]-c2[0]|+|c1[1]-c2[1]|
dist:=dist+d
返回dist
让我们看下面的实现以更好地理解-
示例
class Solution: def solve(self, mat, blocks): coords = {'start': (0,0)} for row in range(len(mat)): for col in range(len(mat[row])): coords[mat[row][col]] = (row,col) dist = 0 blocks = ['start']+blocks for i in range(len(blocks)-1): c1 = coords[blocks[i]] c2 = coords[blocks[i+1]] d = abs(c1[0]-c2[0]) + abs(c1[1]-c2[1]) dist += d return dist ob = Solution()inp = [["q", "b", "c"], ["d", "e", "z"], ["g", "h", "i"]] blk = ["h", "b", "c"] print(ob.solve(inp, blk))
输入项
[["q", "b", "c"],["d", "e", "z"],["g", "h", "i"]]
输出结果
6