2D 매트릭스 매트가 있다고 가정합니다. 행렬 요소를 나선형으로 인쇄해야 합니다. 처음에는 첫 번째 행(mat[0, 0])에서 시작하여 전체 내용을 인쇄한 다음 마지막 열을 따라 인쇄한 다음 마지막 행을 따라 인쇄하는 방식으로 요소를 나선형으로 인쇄합니다.피>
따라서 입력이 다음과 같으면
7 | 10 | 9 |
2 | 9 | 1 |
6 | 2 | 3 |
9 | 1 | 4 |
2 | 7 | 5 |
9 | 9 | 11 |
출력은 [7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]
입니다.이 문제를 해결하기 위해 다음 단계를 따릅니다.
- d :=0
- 위쪽 :=0, 아래쪽 :=행렬의 행 개수 – 1, 왼쪽 :=0, 오른쪽 :=행렬의 열 개수 - 1
- c :=0
- res :=새 목록
- 방향:=0
- 위쪽 <=아래쪽 및 왼쪽 <=오른쪽, do
- 방향이 0이면
- 왼쪽에서 오른쪽으로 + 1 범위의 i에 대해
- 매트릭스[top, i]를 res에 삽입
- 상단 :=상단 + 1
- 왼쪽에서 오른쪽으로 + 1 범위의 i에 대해
- 방향이 1과 같으면
- 위에서 아래로 + 1 범위의 i에 대해
- 매트릭스[i, right]를 res에 삽입
- 오른쪽 :=오른쪽 - 1
- 위에서 아래로 + 1 범위의 i에 대해
- 방향이 2와 같으면
- 오른쪽에서 왼쪽으로 범위 내 i의 경우 - 1, 1 감소, do
- 매트릭스[down, i]를 res에 삽입
- 아래로 :=아래로 - 1
- 오른쪽에서 왼쪽으로 범위 내 i의 경우 - 1, 1 감소, do
- 방향이 3과 같으면
- 위에서 1까지의 범위에 있는 i에 대해 1 감소, do
- 매트릭스[i, left]를 res에 삽입
- 왼쪽 :=왼쪽 + 1
- 위에서 1까지의 범위에 있는 i에 대해 1 감소, do
- 방향이 0이면
- 방향 :=(방향 + 1) 모드 4
- 반환 결과
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class Solution: def solve(self, matrix): d = 0 top = 0 down = len(matrix) - 1 left = 0 right = len(matrix[0]) - 1 c = 0 res = [] direction = 0 while top <= down and left <= right: if direction == 0: for i in range(left, right + 1): res.append(matrix[top][i]) top += 1 if direction == 1: for i in range(top, down + 1): res.append(matrix[i][right]) right -= 1 if direction == 2: for i in range(right, left - 1, -1): res.append(matrix[down][i]) down -= 1 if direction == 3: for i in range(down, top - 1, -1): res.append(matrix[i][left]) left += 1 direction = (direction + 1) % 4 return res ob = Solution() matrix = [ [7, 10, 9], [2, 9, 1], [6, 2, 3], [9, 1, 4], [2, 7, 5], [9, 9, 11] ] print(ob.solve(matrix))
입력
[ [7, 10, 9],[2, 9, 1],
[6, 2, 3],[9, 1, 4],
[2, 7, 5],[9, 9, 11]
]
출력
[7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]