Leetcode Java Spiral Matrix IV
업데이트:
문제
코드
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public int[][] spiralMatrix(int m, int n, ListNode head) {
int[][] result = new int[m][n];
for (int[] row : result) {
Arrays.fill(row, -1);
}
int top = 0;
int bottom = m - 1;
int left = 0;
int right = n - 1;
while (head != null) {
for (int col = left; col <= right && head != null; col++) {
result[top][col] = head.val;
head = head.next;
}
top++;
for (int row = top; row <= bottom && head != null; row++) {
result[row][right] = head.val;
head = head.next;
}
right--;
for (int col = right; col >= left && head != null; col--) {
result[bottom][col] = head.val;
head = head.next;
}
bottom--;
for (int row = bottom; row >= top && head != null; row--) {
result[row][left] = head.val;
head = head.next;
}
left++;
}
return result;
}
}
결과
설명
- head의 값들을 $m \times n$ 크기의 배열을 만들어 나선형으로 이동하면서 값을 넣어주는 문제이다.
- 값을 채운 나머지 위치에는 -1을 넣어준다.
- 문제 풀이에 필요한 변수를 정의한다.
- result는 결과를 넣을 변수로, $m \times n$ 크기의 2차원 정수 배열로 초기화하고 모든 위치에 -1을 넣어준다.
- top, bottom, left, right는 각각 result의 각 위치를 저장할 변수로, 0, $m - 1$, 0, $n - 1$로 초기화한다.
- head가 null이 아닐 때 까지 아래를 반복한다.
- result의 top번째 행의 좌측에서 우측으로 head의 값을 꺼내 넣어준 후, top을 증가시켜 아래 줄로 이동한다.
- result의 right번째 열의 위에서 아래로 head의 값을 꺼내 넣어준 후, right를 감소하여 왼쪽 열로 이동한다.
- result의 bottom번째 행의 우측에서 좌측으로 head의 값을 꺼내 넣어준 후, bottom을 감소시켜 윗 줄로 이동한다.
- result의 left번째 열의 아래에서 위로 head의 값을 꺼내 넣어준 후, left를 증가시켜 오른쪽 열로 이동한다.
- 3번의 반복이 완료되어 head의 값이 순차적으로 입력된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기