2326. Spiral Matrix IV #
题目 #
给定两个整数 m
和 n
,表示矩阵的维数。
另外给定一个整数链表的头节点 head
。
生成并返回一个大小为 m x n
的螺旋矩阵,矩阵包含链表中的所有整数。链表中的整数从矩阵左上角开始、顺时针按螺旋顺序填充。如果还存在剩余的空格,则用 -1
填充。
思路 #
代码 #
class Solution {
public int getValue(ListNode[] ptr) {
if (ptr[0] == null) return -1;
int value = ptr[0].val;
ptr[0] = ptr[0].next;
return value;
}
public void helper(int[][] result, int top, int bottom, int left, int right, ListNode[] ptr) {
if (top > bottom || left > right) return;
if (top == bottom) { for (int j=left; j<=right; j++) result[top][j] = getValue(ptr); return; }
if (left == right) { for (int i=top; i<=bottom; i++) result[i][left] = getValue(ptr); return; }
else {
for (int j=left; j<right; j++) result[top][j] = getValue(ptr);
for (int i=top; i<bottom; i++) result[i][right] = getValue(ptr);
for (int j=right; j>left; j--) result[bottom][j] = getValue(ptr);
for (int i=bottom; i>top; i--) result[i][left] = getValue(ptr);
}
helper(result, top+1, bottom-1, left+1, right-1, ptr);
}
public int[][] spiralMatrix(int m, int n, ListNode head) {
int[][] result = new int[m][n];
ListNode[] ptr = new ListNode[1];
ptr[0] = head;
helper(result, 0, m-1, 0, n-1, ptr);
return result;
}
}