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

六安市公司网站建设手机电脑网站建设

六安市公司网站建设,手机电脑网站建设,重庆信息发布平台,中国舆情监测公司排名54. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 解题思路 顺时针螺旋顺序也就是“从左向…

54. 螺旋矩阵

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

解题思路

顺时针螺旋顺序也就是“从左向右、从上向下、从右向左、从下向上” 循环。那么算法的核心就是模拟这个过程,
定义左、右、上、下 四个边界 l , r , t , b,然后按照这个顺序遍历,同时收缩边界,直到遍历完所有元素。

  1. 定义左、右、上、下 四个边界 l , r , t , b
  2. 从左到右遍历上边界,遍历完将上边界下移
  3. 从上到下遍历右边界,遍历完将右边界左移
  4. 从右到左遍历下边界,遍历完将下边界上移
  5. 从下到上遍历左边界,遍历完将左边界右移
  6. 重复上述步骤,直到遍历完所有元素

代码实现

//这是错的,往下看
vector<int> spiralOrder(vector<vector<int>>& matrix) {int m = matrix.size(),n=matrix[0].size();int l = 0, r = n - 1, t = 0, b = m - 1;int i = 0, nums = n *m;vector<int> ans;while (i <nums) {// 向右for (int j = l; j <= r; j++) {ans.push_back(matrix[t][j]);i++;}// 向下t++;for (int j =t; j <= b; j++) {ans.push_back(matrix[j][r]);i++;}//向左r--;for (int j = r; j >= l; j--) {ans.push_back(matrix[d][j]);i++;}//向上b--;for (int j = b; j >= t; j--) {ans.push_back(matrix[j][l]);i++;}l++;}return ans;}

这段代码符合上述算法流程,但是matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]时,输出为[1, 2 ,3 ,4, 8 ,12, 11 ,10 ,9,5 ,6 ,7 ,6 ],多输出了一个6,在向右遍历的时候,这段代码正确的将67加入到了ans中,但是此时i=12,l=1,r=2接着开始向下遍历执行t++后,此时t=2,b=1不满足循环条件跳过,接着向左移动执行r--后,此时r=1,l=1竟然满足循环条件,进入了循环把6又加到了ans,所以在每一个循环中,还有一个循环条件就是i<nums,防止多输出元素。
下面这段代码才是正确的代码

vector<int> spiralOrder(vector<vector<int>>& matrix) {int m = matrix.size(),n=matrix[0].size();int l = 0, r = n - 1, t = 0, b = m - 1;int i = 0, nums = n *m;vector<int> ans;while (i <nums) {// 向右for (int j = l; j <= r&&i<nums; j++) {ans.push_back(matrix[t][j]);i++;}// 向下t++;for (int j =t; j <= b&&i<nums; j++) {ans.push_back(matrix[j][r]);i++;}//向左r--;for (int j = r; j >= l&&i<nums; j--) {ans.push_back(matrix[d][j]);i++;}//向上b--;for (int j = b; j >= t&&i<nums; j--) {ans.push_back(matrix[j][l]);i++;}l++;}return ans;
}

或者说,当上边界和下边界相遇或左边界和右边界相遇时,直接跳出循环,防止多输出元素

vector<int> spiralOrder(vector<vector<int>>& matrix) {int m = matrix.size(),n=matrix[0].size();int l = 0, r = n - 1, t = 0, b = m - 1;vector<int> ans;while (true) {for (int i = l; i <= r; i++) ans.push_back(matrix[t][i]); //向右if (++t > b) break;for (int i = t; i <= b; i++) ans.push_back(matrix[i][r]); // 向下if (l > --r) break;for (int i = r; i >= l; i--) ans.push_back(matrix[b][i]); // 向左if (t > --b) break;for (int i = b; i >= t; i--) ans.push_back(matrix[i][l]); //向上if (++l > r) break;}return ans;
}
http://www.yayakq.cn/news/791574/

相关文章:

  • 网站建设推广语言尉氏县金星网架公司
  • 12306网站建设 实际wordpress首页模板修改
  • 网站做的好的献县网站建设
  • 建设银行深分行圳招聘网站湖南省住房和城乡建设厅网站考试
  • app与网站数据交互怎么给新公司做网站
  • 广告素材网站哪个比较好郑州seo排名扣费
  • 网站怎么看哪个公司网站建设wordpress文章版本
  • 有心学做网站凡科做网站的方法
  • 微信公众平台怎么做微网站吗广州公司宣传片
  • 雄安免费网站建设哪家好东莞建站公司速推全网天下首选
  • 做网站页面多少钱app软件定制开发平台
  • 视频上传下载网站建设wordpress干嘛用的
  • 大型网站域名wordpress栏目title
  • 双色调网站seo搜索引擎优化课后答案
  • 社交网站wap模板宁波电商网站建设开发
  • 网站开发技术项目说明书鹤壁做网站推广
  • 网站开发用什么网站加强两微一端和门户网站建设
  • 算卦网站哪里可以做电商网站建设与管理 教案
  • 学校网站平台建设方案wordpress 博客主题 seo
  • 五家渠网站建设域名seo站长工具
  • 网站建设术语名词免费建设网站软件下载
  • 如何将网址提交到一些权重比较高的网站网页平面设计要学什么
  • 大航母网站建设好不好南京哪家做网站好
  • 买域名的网站周年庆网站要怎么做6
  • app充值网站开发专业的网站制作公司哪家好
  • 网站搜索优化价格设计网站有哪些
  • 做宴会有哪些素材网站自己做动漫头像的网站
  • 哪个网站可以做空比特币肯德基网站建设的目标
  • 用户登录网站开发做爰全过程网站免费的视频教程
  • 漳州企业网站建设网站搭建 虚拟空间