LeetCode Algorithm 2326. 螺旋矩阵 IV

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 2326. 螺旋矩阵 IV相关的知识,希望对你有一定的参考价值。

题目链接:2326. 螺旋矩阵 IV

Ideas

算法:边界压缩
数据结构:链表
思路:印象中好像刚开始学算法的时候就遇到过类似的题目,什么旋转打印矩阵之类的,跟这道题类似。

  1. 首先创建一个 m * n 的矩阵,默认用 -1 填充即可;
  2. 定义up、down、left、right四个变量,分别表示矩阵的四个边界;
  3. 遍历链表往矩阵里面填数,完成一行或一列之后就压缩对应的边界,行和列遍历的顺序就是顺时针遍历。

Code

C++

class Solution 
public:
    vector<vector<int>> spiralMatrix(int m, int n, ListNode* head) 
        vector<vector<int>> res(m, vector<int>(n, -1));
        int up = 0, down = m - 1, left = 0, right = n - 1;
        while (head) 
            // 1.从左向右,行不变列变
            for (int i = left; i < right + 1; i++) 
                res[up][i] = head->val;
                head = head->next;
                if (head == nullptr) return res;
            
            if (up < down) up++;

            // 2.从上到下,列不变行变
            for (int i = up; i < down + 1; i++) 
                res[i][right] = head->val;
                head = head->next;
                if (head == nullptr) return res;
            
            if (left < right) right--;

            // 3.从右向左,行不变列变
            for (int i = right; i > left - 1; i--) 
                res[down][i] = head->val;
                head = head->next;
                if (head == nullptr) return res;
            
            if (up < down) down--;

            // 4.从下到上,列不变行变
            for (int i = down; i > up - 1; i--) 
                res[i][left] = head->val;
                head = head->next;
                if (head == nullptr) return res;
            
            if (left < right) left++;
        
        return res;
    
;

以上是关于LeetCode Algorithm 2326. 螺旋矩阵 IV的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 2326 数学作业

uva live 2326 - Moving Tables

bzoj2326HNOI2011数学作业

2326: [HNOI2011]数学作业

BZOJ2326: [HNOI2011]数学作业

bzoj2326: [HNOI2011]数学作业