[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:
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:
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实现
/** * 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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-09-15 [LeetCode] 1189. Maximum Number of Balloons