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

更新於:2020年10月21日

194 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告