สมมติว่าเรามีเมทริกซ์ของสตริงที่ไม่ซ้ำกันซึ่งแสดงถึงบล็อกของเมือง และรายการสตริงอื่นที่มีบล็อกให้เยี่ยมชม หากเราอยู่ที่ block matrix[0][0] ให้หาระยะทางแมนฮัตตันทั้งหมดที่ต้องการเพื่อเข้าชมทุกบล็อกตามลำดับ
ดังนั้นหากอินพุตเป็นแบบ
| Q | ข | C |
| ด | อี | Z |
| ก | ก | ฉัน |
บล็อค =[H,B,C]
จากนั้นผลลัพธ์จะเป็น 6 เนื่องจาก "h" คือ 2 บล็อกด้านล่าง (ใต้) และ 1 บล็อกด้านขวา (ตะวันออก) "b" คือ 2 บล็อกขึ้นไป (เหนือ) "c" คือ 1 บล็อกด้านขวา (ตะวันออก)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- coords :=แผนที่ที่มีคีย์ 'start' และค่า (0, 0)
- สำหรับแต่ละแถวในเสื่อ ทำ
- สำหรับแต่ละ col in mat ทำ
- แทรก (row,col) ลงใน coords[mat[row, col]]
- สำหรับแต่ละ col in mat ทำ
- dist :=0
- อัปเดตบล็อคโดยเพิ่ม 'start' ที่จุดเริ่มต้น
- สำหรับฉันในช่วง 0 ถึงขนาดของบล็อก -1 ทำ
- c1 :=coords[blocks[i]]
- c2 :=coords[blocks[i+1]]]
- d :=|c1[0]-c2[0]| + |c1[1]-c2[1]|
- dist :=dist + d
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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