Robot bắt đầu tại tọa độ (0, 0) trên mặt phẳng Descartes. Cho danh sách các bước di chuyển gồm N (Bắc), S (Nam), W (Tây), E (Đông). Quy tắc đặc biệt: nếu robot đến ô đã từng thăm, nó sẽ tiếp tục di chuyển cùng hướng cho đến khi gặp ô chưa thăm. Cần kiểm tra sau chuỗi di chuyển robot có dừng tại tọa độ (x, y) cho trước hay không.
Ví dụ: moves = ['N','N','E','N','W','S'], coord = [0, -1] → True.
Quy trình giải quyết
- Khởi tạo
nx = ny = 0, tậpvisited = {(0, 0)}. - Với mỗi bước
ktrongmoves:- Tùy hướng
N/S/E/W, lặpwhile (nx, ny) in visitedđể tăng/giảm tọa độ cho đến khi tìm được ô mới. - Thêm ô mới vào
visited.
- Tùy hướng
- Trả về
Truenếu(nx, ny) == coord, ngược lạiFalse.
Ví dụ mã nguồn
class Solution:
def solve(self, moves, coord):
ny = nx = 0
visited = {(0, 0)}
for k in moves:
if k == "N":
while (nx, ny) in visited:
ny += 1
elif k == "S":
while (nx, ny) in visited:
ny -= 1
elif k == "E":
while (nx, ny) in visited:
nx += 1
else: # W
while (nx, ny) in visited:
nx -= 1
visited.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)) # Output: True
Đầu vào
['N','N','E','N','W','S'], [0, -1]
Đầu ra
True