[LeetCode] 2326. Spiral Matrix IV

You are given two integers m and n, which represent the dimensions of a matrix.

You are also given the head of a linked list of integers.

Generate an m x n matrix that contains the integers in the linked list presented in spiral order (clockwise), starting from the top-left of the matrix. If there are remaining empty spaces, fill them with -1.

Return the generated matrix.

Example 1:
Example 1
Input: m = 3, n = 5, head = [3,0,2,6,8,1,7,9,4,2,5,5,0]
Output: [[3,0,2,6,8],[5,0,-1,-1,1],[5,2,4,9,7]]
Explanation: The diagram above shows how the values are printed in the matrix.
Note that the remaining spaces in the matrix are filled with -1.

Example 2:
Example 2
Input: m = 1, n = 4, head = [0,1,2]
Output: [[0,1,2,-1]]
Explanation: The diagram above shows how the values are printed from left to right in the matrix.
The last space in the matrix is set to -1.

Constraints:
1 <= m, n <= 105
1 <= m * n <= 105
The number of nodes in the list is in the range [1, m * n].
0 <= Node.val <= 1000

螺旋矩阵 IV。

给你两个整数:m 和 n ,表示矩阵的维数。

另给你一个整数链表的头节点 head 。

请你生成一个大小为 m x n 的螺旋矩阵,矩阵包含链表中的所有整数。链表中的整数从矩阵 左上角 开始、顺时针 按 螺旋 顺序填充。如果还存在剩余的空格,则用 -1 填充。

返回生成的矩阵。

思路

还是按照类似54题那样的遍历方式,无非是把 node.val 放入坐标里。

复杂度

时间O(mn)
空间O(mn) - output matrix

代码

Java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
* 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[][] res = new int[m][n];
// initial the matrix with -1
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
res[i][j] = -1;
}
}

int top = 0;
int bottom = m - 1;
int left = 0;
int right = n - 1;
ListNode cur = head;
while (left <= right && top <= bottom) {
// left to right
for (int i = left; i <= right; i++) {
if (cur != null) {
res[top][i] = cur.val;
cur = cur.next;
} else {
break;
}
}
top++;

// right to bottom
for (int i = top; i <= bottom; i++) {
if (cur != null) {
res[i][right] = cur.val;
cur = cur.next;
} else {
break;
}
}
right--;

// right to left
if (top <= bottom) {
for (int i = right; i >= left; i--) {
if (cur != null) {
res[bottom][i] = cur.val;
cur = cur.next;
} else {
break;
}
}
}
bottom--;

// bottom to top
if (left <= right) {
for (int i = bottom; i >= top; i--) {
if (cur != null) {
res[i][left] = cur.val;
cur = cur.next;
} else {
break;
}
}
}
left++;

}
return res;
}
}

[LeetCode] 2326. Spiral Matrix IV
https://shurui91.github.io/posts/3244292270.html
Author
Aaron Liu
Posted on
September 14, 2024
Licensed under