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
廣告