博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Spiral Matrix II 螺旋矩阵之二
阅读量:6858 次
发布时间:2019-06-26

本文共 1858 字,大约阅读时间需要 6 分钟。

 

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3Output:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]
 

此题跟之前那道 本质上没什么区别,就相当于个类似逆运算的过程,这道题是要按螺旋的顺序来填数,由于给定矩形是个正方形,我们计算环数时用n / 2来计算,若n为奇数时,此时最中间的那个点没有被算在环数里,所以最后需要单独赋值,还是下标转换问题是难点,参考之前 的讲解来转换下标吧,代码如下:

 

解法一:

class Solution {public:    vector
> generateMatrix(int n) { vector
> res(n, vector
(n, 0)); int val = 1, p = n; for (int i = 0; i < n / 2; ++i, p -= 2) { for (int col = i; col < i + p; ++col) res[i][col] = val++; for (int row = i + 1; row < i + p; ++row) res[row][i + p - 1] = val++; for (int col = i + p - 2; col >= i; --col) res[i + p - 1][col] = val++; for (int row = i + p - 2; row > i; --row) res[row][i] = val++; } if (n % 2 != 0) res[n / 2][n / 2] = val; return res; }};

 

当然我们也可以使用下面这种简化了坐标转换的方法,博主个人还是比较推崇下面这种解法,不容易出错,而且好理解,参见代码如下:

 

解法二:

class Solution {public:    vector
> generateMatrix(int n) { vector
> res(n, vector
(n, 0)); int up = 0, down = n - 1, left = 0, right = n - 1, val = 1; while (true) { for (int j = left; j <= right; ++j) res[up][j] = val++; if (++up > down) break; for (int i = up; i <= down; ++i) res[i][right] = val++; if (--right < left) break; for (int j = right; j >= left; --j) res[down][j] = val++; if (--down < up) break; for (int i = down; i >= up; --i) res[i][left] = val++; if (++left > right) break; } return res; }};

 

类似题目:

 

参考资料:

 

转载地址:http://aljyl.baihongyu.com/

你可能感兴趣的文章
第二十二章:动画(八)
查看>>
智慧城市当量力而为 专访曙光云计算公司副总裁张春泉 ...
查看>>
为什么要切换到HTTPS?
查看>>
Android WebView打开网页一片空白
查看>>
【直播回顾】Java Spring Boot开发实战系列课程(第17讲):Spring Boot 2.0实战Docker容器Linux...
查看>>
介绍一下Tiled2Unity的优点与缺点
查看>>
正则表达式的一些探索(偏JavaScript)
查看>>
docker学习系列1 使用docker 快速实现多版本PHP
查看>>
在阿里云做前端,是种怎样的体验?
查看>>
软银重金加注无人货运,9.4亿美元投资机器人公司Nuro
查看>>
Spring Cloud Alibaba基础教程:Nacos的集群部署
查看>>
地铁译:Spark for python developers ---Spark流式数据处理
查看>>
最全技术面试180题:阿里11面试+网易+百度+美团!
查看>>
「镁客·请讲」透彻影像王书浩:用AI“复制”大脑,弥补病理医生的9万缺口...
查看>>
涨姿势,图文带你了解 8 大排序算法
查看>>
Java基础知识的全面巩固_note1(附各种demo code)
查看>>
DataWorks2.0的“业务流程”与1.0的“工作流”的对比
查看>>
基于Kubernetes的容器云在万达的落地
查看>>
阿里联合ICA联盟发布IoT系列标准,智能门锁标准首批授权测试机构名单出炉
查看>>
Fastify 2.2.0 和 1.14.5 发布,极速 Node.js Web 框架
查看>>