54. Spiral Matrix

LONGNEW·2023년 8월 31일
0

CP

목록 보기
150/155

https://leetcode.com/problems/spiral-matrix/?envType=featured-list&envId=top-google-questions?envType=featured-list&envId=top-google-questions

input :

  • matrix

output :

  • 시계방향으로 순회하면서 해당 값들을 반환하시오.

조건 :

  • m == matrix.length
  • n == matrix[i].length

Solution explain : Solution1

idea

  • 4방향으로 움직일 수 있도록 하고
  • visit을 통해 이미 방문한것을 확인한다.

  • 전체 체크해야 하는 개수가 row * col의 수니까 그 값만큼 순회를 수행하면 된다.

주의

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        dx = [0, 1, 0, -1]
        dy = [1, 0, -1, 0]
        col, row = len(matrix[0]), len(matrix)
        visit = [[0] * col for _ in range(row)]
        ret = []

        idx = 0
        x, y = 0, 0
        for _ in range(row * col):
            ret.append(matrix[x][y])
            visit[x][y] = 1
            x, y = x + dx[idx], y + dy[idx]

            if x < 0 or x >= row or y < 0 or y >= col or visit[x][y] == 1:
                x, y = x - dx[idx], y - dy[idx]
                idx += 1
                if idx == 4:
                    idx = 0
                x, y = x + dx[idx], y + dy[idx]
        return ret

0개의 댓글