LeetCode Algorithm 2326. 螺旋矩阵 IV
Posted Alex_996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 2326. 螺旋矩阵 IV相关的知识,希望对你有一定的参考价值。
题目链接:2326. 螺旋矩阵 IV
Ideas
算法:边界压缩
数据结构:链表
思路:印象中好像刚开始学算法的时候就遇到过类似的题目,什么旋转打印矩阵之类的,跟这道题类似。
- 首先创建一个 m * n 的矩阵,默认用 -1 填充即可;
- 定义up、down、left、right四个变量,分别表示矩阵的四个边界;
- 遍历链表往矩阵里面填数,完成一行或一列之后就压缩对应的边界,行和列遍历的顺序就是顺时针遍历。
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的主要内容,如果未能解决你的问题,请参考以下文章