LeetCode:Spiral Matrix I II
Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
打印螺旋矩阵
逐个环的打印, 对于m *n的矩阵,环的个数是 (min(n,m)+1) / 2。对于每个环顺时针打印四条边。
注意的是:最后一个环可能只包含一行或者一列数据
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int m = matrix.size(), n;
if(m != 0)n = matrix[0].size();
int cycle = m > n ? (n+1)/2 : (m+1)/2;//环的数目
vector<int>res;
int a = n, b = m;//a,b分别为当前环的宽度、高度
for(int i = 0; i < cycle; i++, a -= 2, b -= 2)
{
//每个环的左上角起点是matrix[i][i],下面顺时针依次打印环的四条边
for(int column = i; column < i+a; column++)
res.push_back(matrix[i][column]);
for(int row = i+1; row < i+b; row++)
res.push_back(matrix[row][i+a-1]);
if(a == 1 || b == 1)break; //最后一个环只有一行或者一列
for(int column = i+a-2; column >= i; column--)
res.push_back(matrix[i+b-1][column]);
for(int row = i+b-2; row > i; row--)
res.push_back(matrix[row][i]);
}
return res;
}
};
Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
本质上和上一题是一样的,这里我们要用数字螺旋的去填充矩阵。同理,我们也是逐个环的填充,每个环顺时针逐条边填充 本文地址
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> > matrix(n, vector<int>(n));
int a = n;//a为当前环的边长
int val = 1;
for(int i = 0; i < n/2; i++, a -= 2)
{
//每个环的左上角起点是matrix[i][i],下面顺时针依次填充环的四条边
for(int column = i; column < i+a; column++)
matrix[i][column] = val++;
for(int row = i+1; row < i+a; row++)
matrix[row][i+a-1] = val++;
for(int column = i+a-2; column >= i; column--)
matrix[i+a-1][column] = val++;
for(int row = i+a-2; row > i; row--)
matrix[row][i] = val++;
}
if(n % 2)matrix[n/2][n/2] = val;//n是奇数时,最后一个环只有一个数字
return matrix;
}
};
【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3774747.html
LeetCode:Spiral Matrix I II的更多相关文章
- LeetCode: Spiral Matrix II 解题报告-三种方法解决旋转矩阵问题
Spiral Matrix IIGiven an integer n, generate a square matrix filled with elements from 1 to n2 in sp ...
- [LeetCode] Spiral Matrix II 螺旋矩阵之二
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...
- [Leetcode] spiral matrix ii 螺旋矩阵
Given an integer n, generate a square matrix filled with elements from 1 to n 2 in spiral order. For ...
- [LeetCode] Spiral Matrix 螺旋矩阵
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- Spiral Matrix I & II
Spiral Matrix I Given an integer n, generate a square matrix filled with elements from 1 to n^2 in s ...
- [LeetCode]Spiral Matrix 54
54.Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the ma ...
- LeetCode: Spiral Matrix 解题报告
Spiral MatrixGiven a matrix of m x n elements (m rows, n columns), return all elements of the matrix ...
- [leetcode]Spiral Matrix II @ Python
原题地址:https://oj.leetcode.com/problems/spiral-matrix-ii/ 题意: Given an integer n, generate a square ma ...
- Leetcode Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...
随机推荐
- ORA-01653:表空间扩展失败的问题以及增加表空间
一.脚本修改方式: ----查询表空间使用情况---使用DBA权限登陆SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB ...
- webstorm与SAE的svn仓库链接进行版本控制
这里把我使用webstorm与SAE的svn仓库链接: 1.先得设置webstorm中的版本控制,File->Settings->Version Control->Subversio ...
- Ubuntu下修改hosts文件
Ubuntu系统的Hosts只需修改/etc/hosts文件,修改完之后要重启网络.具体过程如下:1.修改hostssudo gedit /etc/hosts2.添加解析记录( . )或者从githu ...
- ElasticSearch介绍 【未完成】
ElasticSearch应用于搜索是一个不错的选择,虽有Lucene,但ELK的搜索方便. http://joelabrahamsson.com/elasticsearch-101/ 一.下载 ht ...
- (状压) Brush (IV) (Light OJ 1018)
http://www.lightoj.com/volume_showproblem.php?problem=1018 Mubashwir returned home from the contes ...
- Android学习整理之Activity生命周期篇
一.Activity生命周期说明 Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...
- Windows,linux快捷键
Window系统 按着Alt + 鼠标左键点击 = 直接打开点击空间的属性
- 如何防止鼠标移出移入子元素触发mouseout和mouseover事件
js代码: function isMouseLeaveOrEnter(e, handler) { var reltg=e.relatedTarget?e.relatedTarget:e.type==' ...
- oracle 10g在redhat5下的安装
[root@localhost ~]# groupadd dba -g 111 [root@localhost ~]# groupadd oinstall -g 110 [root@localhost ...
- SQLSERVER性能监控级别步骤
SQLSERVER性能监控级别步骤 下面先用一幅图描述一下有哪些步骤和顺序 1.识别瓶颈 识别瓶颈的原因包括多个方面,例如,资源不足,需要添加或升级硬件: 工作负荷在同类资源之间分布不均匀,例如,一个 ...