题目:原题链接(中等)

标签:数组

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( K ) O(K) O(K) O ( K ) O(K) O(K) 736ms (62.73%)
Ans 2 (Python)
Ans 3 (Python)

解法一(情景模拟):

class Solution:
    def printKMoves(self, K: int) -> List[str]:
        if K == 0:
            return ["R"]

        # x0, y0, x1, y1 = 0, 0, 0, 0  # 四边坐标
        black = set()

        x, y = 0, 0
        last = 0
        stat = 0  # 0=R,1=D,2=L,3=U
        while K >= 0:
            # 计算新的坐标
            if stat == 0:
                x += 1
            elif stat == 1:
                y -= 1
            elif stat == 2:
                x -= 1
            else:
                y += 1

            # 更新新的边缘位置
            # x0, y0, x1, y1 = min(x, x0), min(y, y0), max(x, x1), max(y, y1)

            last = stat

            # 计算方向并调整地图颜色
            if (x, y) in black:
                stat = (stat - 1) % 4
                black.remove((x, y))
            else:
                stat = (stat + 1) % 4
                black.add((x, y))

            K -= 1

            # print(x, y, ["R", "D", "L", "U"][stat], "(", x0, y0, x1, y1, ")")

        # 计算地图边缘位置
        x0, y0, x1, y1 = float("inf"), float("inf"), float("-inf"), float("-inf")  # 四边坐标
        for i, j in black:
            x0, y0, x1, y1 = min(i, x0), min(j, y0), max(i, x1), max(j, y1)

        # 生成地图表
        ans = []
        for j in range(y1, y0 - 1, -1):
            row = []
            for i in range(x0, x1 + 1):
                if i == x and j == y:
                    row.append(["R", "D", "L", "U"][last])
                elif (i, j) in black:
                    row.append("X")
                else:
                    row.append("_")
            ans.append(row)

        # 生成最终结果
        return ["".join(row) for row in ans]