LeetCode 2326. Spiral Matrix IV Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
2326. Spiral Matrix IV

Description

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

Solutions

Solution 1: Simulation

We define a two-dimensional array ans to store the elements in the linked list, initially all filled with -1. We define three variables i, j, k, representing the current row, column, and direction respectively. We define an array dirs to represent the offsets of the four directions.

Then we start traversing the linked list. Each time we traverse a node, we fill the current node's value into ans[i][j], then update the linked list pointer. If the linked list is empty, it means all elements have been filled and we exit the loop.

Otherwise, we need to find the position of the next element. We can calculate the next position (x, y) through the current position (i, j) and the current direction k. If (x, y) is within the range of the matrix, and ans[x][y] is -1, it means (x, y) has not been filled yet, so we take (x, y) as the next position. Otherwise, we need to change the direction.

After traversing the linked list, we get a spiral matrix and return it.

The time complexity is O(m × n), and the space complexity is O(m × n), where m and n represent the number of rows and columns of the matrix, respectively.

PythonJavaC++GoTypeScript
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def spiralMatrix(self, m: int, n: int, head: Optional[ListNode]) -> List[List[int]]: ans = [[-1] * n for _ in range(m)] i = j = k = 0 dirs = (0, 1, 0, -1, 0) while 1: ans[i][j] = head.val head = head.next if head is None: break while 1: x, y = i + dirs[k], j + dirs[k + 1] if 0 <= x < m and 0 <= y < n and ans[x][y] == -1: i, j = x, y break k = (k + 1) % 4 return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !