假设我们有一个代表城市街区的唯一字符串矩阵,另一个包含要访问的街区的字符串列表。如果我们位于块矩阵[0] [0],则找到按顺序访问每个块所需的曼哈顿总距离。
所以,如果输入像
问 | 乙 | C |
d | Ë | ž |
G | G | 一世 |
块= [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