0
点赞
收藏
分享

微信扫一扫

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;
}
};


举报

相关推荐

0 条评论