当前位置:网站首页>leetcode-6111:螺旋矩阵 IV

leetcode-6111:螺旋矩阵 IV

2022-07-05 05:46:00 菊头蝙蝠

leetcode-6111:螺旋矩阵 IV

题目

题目连接
给你两个整数:mn ,表示矩阵的维数。

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

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

返回生成的矩阵。

示例 1:
在这里插入图片描述

输入:m = 3, n = 5, head = [3,0,2,6,8,1,7,9,4,2,5,5,0]
输出:[[3,0,2,6,8],[5,0,-1,-1,1],[5,2,4,9,7]]
解释:上图展示了链表中的整数在矩阵中是如何排布的。
注意,矩阵中剩下的空格用 -1 填充。

示例 2:
在这里插入图片描述

输入:m = 1, n = 4, head = [0,1,2]
输出:[[0,1,2,-1]]
解释:上图展示了链表中的整数在矩阵中是如何从左到右排布的。 
注意,矩阵中剩下的空格用 -1 填充。

在这里插入图片描述

解题

方法一:模拟

螺旋矩阵系列题目都差不多,无非是用链表来取值。

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */
class Solution {
    
public:
    vector<vector<int>> spiralMatrix(int m, int n, ListNode* head) {
    
        vector<vector<int>> matrix(m,vector<int>(n,-1));
        vector<vector<int>> dirs={
    {
    0,1},{
    1,0},{
    0,-1},{
    -1,0}};
        int x=0,y=0;
        int cur_d=0;
        int top=0,down=m-1,left=0,right=n-1;
        ListNode* cur=head;
        while(cur){
    
            matrix[x][y]=cur->val;
            if(cur_d==0&&y==right){
    
                top++;
                cur_d++;
            }
            else if(cur_d==1&&x==down){
    
                right--;
                cur_d++;
            }
            else if(cur_d==2&&y==left){
    
                down--;
                cur_d++;
            }
            else if(cur_d==3&&x==top){
    
                left++;
                cur_d++;
            }
            cur_d%=4;
            x+=dirs[cur_d][0];
            y+=dirs[cur_d][1];
            cur=cur->next;
        }
        return matrix;
        
    }
};
原网站

版权声明
本文为[菊头蝙蝠]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_21539375/article/details/125587819