2326. Spiral Matrix Iv

2326. Spiral Matrix IV #

题目 #

给定两个整数 mn,表示矩阵的维数。

另外给定一个整数链表的头节点 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;
    }
}