LeetCode 筆記 - 2849. Determine if a Cell Is Reachable at a Given Time

探討 LeetCode 2849 題,在無限大的格狀地圖中,給定起點、終點與時間,判斷是否能在指定時間內精確抵達目標。本文介紹解題思路,重點在於計算兩點間的最短 Chebyshev 距離並考慮特殊路徑情況。

發佈
閱讀
約 1 分鐘
字數
344

題目在此 2849. Determine if a Cell Is Reachable at a Given Time

給定兩組座標開始與終點與時間,請問是否可以在剛好那個時間抵達終點。

每個時間單位可以移動一格,並且可以移動相鄰的 8 格,最重要的一點是地圖是無限大的,而且走過的格子可以重複走。

解題思維

名詞解說:

這題條件這麼寬鬆,其實就是需要思維轉一個彎,千萬不要看到座標、路徑就想到 DFS,這題 DFS 絕對會超時。
仔細想想,你會發現其實只要判斷終點是否在起點的 8 格內,且時間大於等於兩點的距離,就可以了。
因為我可以透過直走或斜走還有各種重複走,把時間控制在剛好那個時間就可以了。
剩下就是排除掉特殊情況,例如起點與終點相同但時間是一秒。image 106

程式碼

1
2
3
4
5
6
7
8
9
10
11
class Solution:
def isReachableAtTime(self, sx: int, sy: int, fx: int, fy: int, t: int) -> bool:

if fx == sx and fy == sy and t == 1:
return False

step = max(abs(fx - sx), abs(fy - sy))

if t < step:
return False
return True
image 106

也許你也會想看看

輸入關鍵字開始搜尋 · ↑↓ 選擇 · Enter 開啟