2326. Spiral Matrix IV

#### QUESTION:

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
``````

#### SOLUTION:

``````class Solution {
func spiralMatrix(_ m: Int, _ n: Int, _ head: ListNode?) -> [[Int]] {
var result: [[Int]] = Array(repeating: Array(repeating: -1, count: n), count: m)
let xChange:[Int] = [0,1,0,-1] // 坐标x的操作
let yChange:[Int] = [1,0,-1,0] // 坐标y的操作
var direction:Int = 0
var pos:[Int] = [0,0]
var posX:Int = pos[0] + xChange[direction % 4]
var posY:Int = pos[1] + yChange[direction % 4]
if posX < 0 || posX >= m || posY < 0 || posY >= n || result[posX][posY] != -1 {
// 超出了范围或者已经赋值
direction += 1
posX = pos[0] + xChange[direction % 4]
posY = pos[1] + yChange[direction % 4]
}
pos = [posX, posY]
}
return result
}
}
``````