算法模型总结:螺旋升天矩阵
创始人
2024-03-30 11:24:04

文章目录

  • 螺旋升天矩阵总结
  • 零、前言
  • 一、正方形螺旋矩阵
        • [59. 螺旋矩阵 II](https://leetcode.cn/problems/spiral-matrix-ii/)
    • 1.思路
    • 2.实现
  • 二、矩形矩阵
        • [54. 螺旋矩阵](https://leetcode.cn/problems/spiral-matrix/)
    • 1.思路
    • 2.实现
  • 三、总结

螺旋升天矩阵总结

本文将持续更新

零、前言

螺旋矩阵遍历,其实本身是一个描述类问题,本来不想总结,但由于lc把它标为简单题,导致人在极度愤怒的情况下做不明白。故想总结一下。

在处理描述性问题的时候,一定要找规律尤其是不变的方法。

一、正方形螺旋矩阵

59. 螺旋矩阵 II

1.思路

  • 层层扒皮,层层遍历
  • 遍历方式:每一行(列)遍历n-1个元素(n为一行中的元素个数)
  • 处理结束时的情况:可能是一个元素,可能是一列或者一行元素。此时我们无法向以上那样扒皮遍历了。正方形最终结束的方式只能是下图中的方式,或者中间有一个元素的方式。而下图中的方式是符合我们的扒皮规则的,因此只需要将最后只有一个的方式单独拎出来就好。

在这里插入图片描述

2.实现

class Solution {
public:vector> generateMatrix(int n) {vector> arr;arr.resize(n);for(int i=0;ii){arr[a][b]=count;count++;b--;}while(a>i){arr[a][b]=count;count++;a--;}i++;}return arr;}
};

二、矩形矩阵

54. 螺旋矩阵

这个玩意真的折磨,题主在做的时候没有考虑周全矩阵的结束形状,导致花费了好多时间:

1.思路

1.只需要遍历的时候将正方形的边使用矩形的两边来表示。

2.当结束的时候,行或者列有一个为1,此时符合,需要特殊情况处理,类似正方形中只有一个元素。我的处理方式是直接使用两个for循环来加载所有元素。

2.实现

class Solution {
public:vector spiralOrder(vector>& matrix) {vector arr;arr.resize(matrix.size()*matrix[0].size());int a=0;//行下标int b=0;//列下标int i=0;//每一层起始位置int d=0;//每一圈有几个元素int count=0;//数组下标int Row=matrix.size();int Col=matrix[0].size();int size=Rowi){   arr[count]=matrix[a][b];count++;b--;}while(a>i){arr[count]=matrix[a][b];count++;a--;}i++;}return arr;}
};

但是这段代码在剑指offer中是通过不了的,时间超时,但是在这里可以通过。

在剑指offer中看到了这样一种写死循环的写法,通过对边界的判定来结束死循环。

class Solution {
public:vector spiralOrder(vector>& matrix) {if (matrix.size() == 0 || matrix[0].size() == 0) return {};vector res;int top = 0;                      //上边界int bottom = matrix.size() - 1;   //下边界int left = 0;                     //左边界int right = matrix[0].size() - 1; //右边界       while (true) {// 从左到右for (int i = left; i <= right; ++ i) res.push_back(matrix[top][i]);// 每次从左往右执行一次,则要往下移一层if (++ top > bottom) break;// 从上到下for (int i = top; i <= bottom; ++ i) res.push_back(matrix[i][right]);// 每次从上到下执行一次,则要往左移一列if (-- right < left) break;// 从右到左for (int i = right; i >= left; -- i) res.push_back(matrix[bottom][i]);// 每次从右到左执行一次,则要往上移一行if (-- bottom < top) break;// 从下到上for (int i = bottom; i >= top; -- i) res.push_back(matrix[i][left]);// 每次从下到上执行一次,则要往右移一列if (++ left > right) break;}return res;}
};

三、总结

螺旋升天数组这类的描述型题目,非常考察统筹规划的能力,需要有一个明确清楚的思路再开始写代码,一般关键在于一层一层展开问题的时候找到那个统一的处理办法。

// 每次从下到上执行一次,则要往右移一列
if (++ left > right) break;
}
return res;
}
};


# 三、总结螺旋升天数组这类的描述型题目,非常考察统筹规划的能力,需要有一个明确清楚的思路再开始写代码,一般关键在于一层一层展开问题的时候找到那个统一的处理办法。本文将持续更新

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...