Python程式:檢查機器人能否透過持續移動到已訪問點到達目標
假設我們有一個機器人,當前位於(0, 0)位置(笛卡爾平面)。我們有一份機器人可執行的移動列表,包含N(北)、S(南)、W(西)和E(東)。但是,如果機器人到達之前到達過的地方,它將繼續沿同一方向移動,直到到達一個新的未訪問點。我們必須檢查它在移動後是否會到達(x, y)座標。
例如,輸入如下:

moves = ['N','N','E','N','W','S'], coord = [0, -1],則輸出為True,因為機器人將向上移動兩次,向右移動一次,再次向上移動一次,向左移動一次,向下移動一次,由於當前位置已被訪問,它將向下移動,然後該位置也被訪問,再次向下,因此停止在(0, -1)位置。
為了解決這個問題,我們將遵循以下步驟:
ny := 0, nx := 0
l := 一個新的集合,最初插入座標(0, 0)
對moves中的每個k,執行:
如果k等於"N",則
當(nx, ny)在l中時,執行:
ny := ny + 1
否則,如果k等於"S",則
當(nx, ny)在l中時,執行:
ny := ny - 1
否則,如果k等於"E",則
當(nx, ny)在l中時,執行:
nx := nx + 1
否則,
當(nx, ny)在l中時,執行:
nx := nx - 1
將(nx, ny)新增到l
當coord等於(nx, ny)時返回true,否則返回false
讓我們看下面的實現來更好地理解:
示例
class Solution:
def solve(self, moves, coord):
ny = nx = 0
l = {(0, 0)}
for k in moves:
if k == "N":
while (nx, ny) in l:
ny += 1
elif k == "S":
while (nx, ny) in l:
ny -= 1
elif k == "E":
while (nx, ny) in l:
nx += 1
else:
while (nx, ny) in l:
nx -= 1
l.add((nx, ny))
return coord[0] == nx and coord[1] == ny
ob = Solution()
moves = ['N','N','E','N','W','S']
coord = [0,-1]
print(ob.solve(moves, coord))輸入
['N','N','E','N','W','S'], [0,-1]
輸出
True
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP