当前位置: 首页 > news >正文

多网合一网站平台建设中国推广网

多网合一网站平台建设,中国推广网,做网站 带宽 多少钱,餐饮公司做网站好处今天我们看一下力扣上的这个题目:146.螺旋遍历二维数组 题目描述: 给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c…

今天我们看一下力扣上的这个题目:146.螺旋遍历二维数组

题目描述:

给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。
螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。
示例 1:
输入:array = [[1,2,3],[8,9,4],[7,6,5]]
输出:[1,2,3,4,5,6,7,8,9]
示例 2:
输入:array = [[1,2,3,4],[12,13,14,5],[11,16,15,6],[10,9,8,7]]
输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
限制:
0 <= array.length <= 100
0 <= array[i].length <= 100

思路

这道题和力扣54题是差不多一样的,我前面也有讲过,大家可以先做做。本道题是一个螺旋矩阵的题,面对这样的题,我们应该想到的是画个图遍历一下这个过程,我们可以得到如下的图:
首先我们先定义一个新数组用来存储数据的并判断一下这个二维数组是否为空,如果是空就返回空数组。如果第一行也是空,那么也是返回空。

  vector<int> res;if (array.empty() || array[0].empty()) {return res;}

接下来我们可以分为:从左到右遍历,从上到下遍历,从右到左遍历,从下到上遍历
在这里插入图片描述
1.从左到右遍历:
我们先定义一个left、right来遍历左右,定义top、bottom为上下。当top<=bottom或者left<=right时,循环一直继续。

		int left = 0;//初始化左边int right = array[0].size() - 1;//初始化右边为第一行数组最后一个数int top = 0;//初始化top为从上到下第一个int bottom = array.size() - 1;//初始化下边为最下列的数for (int i = left; i <= right; i++) {//定义i从最左边开始遍历,一直到第一行最后一个数res.push_back(array[top][i]);//二维数组横坐标不变,纵坐标变化尾插到新数组中}top++;//top向前走继续遍历第二行

在这里插入图片描述
2.从上到下遍历
列不变,行改变

for (int i = top; i <= bottom; i++) {//i从top开始,到bottom结束res.push_back(array[i][right]);//尾插到right这一列}right--;//列数减小

3.从右到左遍历
行不变,列变

 if (top <= bottom) {//判断一下top>bottom时,证明遍历完了,直接返回for (int i = right; i >=left; i--) {//i从右边开始,一直到大于等于left,进行--的操作res.push_back(array[bottom][i]);//尾插到bottom行,i列}bottom--;//bottom向上移动减少}

4.从下到上遍历
列不变,行变

    if (left <= right) {//当左边大于右边的时候,没有要遍历的了for (int i = bottom; i >= top; i--) {//i从bottom开始遍历到topres.push_back(array[i][left]);//尾插到left列}}left++;//完了之后left向左移动加加

最后,返回这个新数组res

完整代码

class Solution {
public:vector<int> spiralArray(vector<vector<int>>& array) {vector<int> res;if (array.empty() || array[0].empty()) {return res;}int left = 0;int right = array[0].size() - 1;int top = 0;int bottom = array.size() - 1;while (top <= bottom && left <= right) {for (int i = left; i <= right; i++) {res.push_back(array[top][i]);}top++;for (int i = top; i <= bottom; i++) {res.push_back(array[i][right]);}right--;if (top <= bottom) {for (int i = right; i >=left; i--) {res.push_back(array[bottom][i]);}bottom--;}if (left <= right) {for (int i = bottom; i >= top; i--) {res.push_back(array[i][left]);}}left++;}return res;}
};

总结

本道题要明确四个循环过程,进行四轮遍历就可以将二维数组都遍历上,也要注意取等号i>=right是要取到right这个边界的。总体来说,螺旋矩阵就是四个循环把握好,就简单了。希望我的理解对大家有帮助~

http://www.ds6.com.cn/news/19543.html

相关文章:

  • 樟木头镇网站建设公司php搭建一个简单的网站
  • 网站怎么做按钮关键词挖掘工具免费
  • 影视网站建设目的网站seo优化价格
  • 网站查询域名ip查询市场推广计划方案
  • 巴西有做amazon网站吗流氓网站
  • 网站建设免费空间注册导航长春网长春关键词排名站设计
  • 章丘做网站哪家强如何推广网上国网
  • 网站做聚合页面方案如何写百度推广技巧方法
  • 福田网站开发谷歌推广代理公司
  • 如何在网站上做标注网络推广的话术怎么说
  • 做美女网站赚钱吗无锡营销型网站制作
  • 岳阳网站建设联系方式浙江网络科技有限公司
  • 网站前端是做啥的下载百度导航app
  • 网站备案注册广州seo网络培训课程
  • 上海专业网站建设渠道宣传渠道有哪些
  • wordpress+one+page站长工具seo优化建议
  • 云速网站建设卖网站链接
  • 建设网站要什么资料搭建一个网站需要多少钱
  • 如何建立一个网站详细步骤智慧软文发布系统
  • 新手怎么建立自己网站百度关键词seo公司
  • 电子商务网站开发背景和意义东莞全网推广
  • 深夜十大亏app软件唐山seo排名优化
  • 广东著名企业河南seo推广
  • 唐山网站建设七彩科技八八网
  • 高端网站企业网站的域名是该企业的
  • 北京赛车网站开发公司百度网盘客服在线咨询
  • 网站改版目标搜索引擎优化实训
  • 个人网站建设程序设计班级优化大师官方网站
  • 网站开发的步骤实训内容免费留电话的广告
  • 黔西县城市建设局网站佛山百度网站快速排名