一只蚂蚁坐在由白色和黑色方格构成的无限网格上。开始时,网格全白,蚂蚁面向右侧。每行走一步,蚂蚁执行以下操作。

(1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并向前移动一个单位。
(2) 如果在黑色方格上,则翻转方格的颜色,向左(逆时针方向)转 90 度,并向前移动一个单位。

编写程序来模拟蚂蚁执行的前 K 个动作,并返回最终的网格。

网格由数组表示,每个元素是一个字符串,代表网格中的一行,黑色方格由 ‘X’ 表示,白色方格由 ‘_’ 表示,蚂蚁所在的位置由 ‘L’, ‘U’, ‘R’, ‘D’ 表示,分别表示蚂蚁 左、上、右、下 的朝向。只需要返回能够包含蚂蚁走过的所有方格的最小矩形。

示例 1:
输入: 0
输出: ["R"]

示例 2:
输入: 2
输出:
[
  "_X",
  "LX"
]

示例 3:
输入: 5
输出:
[
  "U",
  "X
",
  "XX"
]

说明:

  • K <= 100000

Python 解答:

class Solution:
    def printKMoves(self, K: int) -> List[str]:
        direction = [[0, 1], [1, 0], [0, -1], [-1, 0]]
        pos = ['R', 'D', 'L', 'U']
        res = []
        board = [['_' for i in range(2000)] for j in range(2000)]
        x, y = 1800, 1800
        i = 0
        ulimit, dlimit, llimit, rlimit = x, x, y+1, y+1
        for j in range(K+1):
            x += direction[i][0]
            y += direction[i][1]
            if board[x][y] == '_':
                board[x][y] = 'X'
                if j != K:
                    i = (i+1) % 4
            else:
                board[x][y] = '_'
                if j != K:
                    i = (i-1+4) % 4
            if y < llimit:
                llimit = y 
            if y > rlimit:
                rlimit = y 
            if x < ulimit:
                ulimit = x
            if x > dlimit:
                dlimit = x
        board[x][y] = pos[i]
        for i in range(ulimit, dlimit+1):
            res.append(''.join(board[i][llimit:rlimit+1]))
        return res
最后修改日期: 2021年5月13日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。