Spiral Matrix II
2014-04-22 14:33
316 查看
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:
和Spiral Matrix几乎一样,区别就是在Spiral Matrix中讲元素压入队列,而本题只需要对每个矩阵点赋值。
vector<vector<int> > generateMatrix(int n)
{
if(n == 0)
return vector <vector <int> >();
vector <vector <int> > matrix(n);
for(int i=0; i <n; i++)
matrix[i].resize(n);
int elem = 1;
int x1 = 0;
int y1 = 0;
int x2 = n-1;
int y2 = n-1;
while(x1 <= x2 && y1 <= y2)
{
//up row
for(int i = y1; i <= y2; ++i)
matrix[x1][i] = elem++;
//right column
for(int i = x1+1; i <= x2; ++i)
matrix[i][y2] = elem++;
//bottom row
if(x2 != x1)
for(int i = y2-1; i >= y1; --i)
matrix[x2][i] = elem++;
//left column
if(y1 != y2)
for(int i = x2-1; i > x1; --i)
matrix[i][y1] = elem++;
x1++, y1++, x2--, y2--;
}
return matrix;
}
For example,
Given n = 3,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
和Spiral Matrix几乎一样,区别就是在Spiral Matrix中讲元素压入队列,而本题只需要对每个矩阵点赋值。
vector<vector<int> > generateMatrix(int n)
{
if(n == 0)
return vector <vector <int> >();
vector <vector <int> > matrix(n);
for(int i=0; i <n; i++)
matrix[i].resize(n);
int elem = 1;
int x1 = 0;
int y1 = 0;
int x2 = n-1;
int y2 = n-1;
while(x1 <= x2 && y1 <= y2)
{
//up row
for(int i = y1; i <= y2; ++i)
matrix[x1][i] = elem++;
//right column
for(int i = x1+1; i <= x2; ++i)
matrix[i][y2] = elem++;
//bottom row
if(x2 != x1)
for(int i = y2-1; i >= y1; --i)
matrix[x2][i] = elem++;
//left column
if(y1 != y2)
for(int i = x2-1; i > x1; --i)
matrix[i][y1] = elem++;
x1++, y1++, x2--, y2--;
}
return matrix;
}
相关文章推荐
- Unable to resolve target 'android-XX'
- 苹果和谷歌提供独家游戏开发者协议
- assert函数用法总结
- LINQ标准查询操作符(四) —AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt
- Plug and Play
- Android UI开发详解之模板控件的复用
- Leetcode_Remove Duplicates from Sorted Array II
- SQL大数据量查询的优化
- Android SQLite数据库操作实例
- C语言函数sscanf()的用法
- SWT全接触
- Activex、OLE、COM、OCX、DLL之间的区别(转)
- 谈谈自己的对新博客的观点
- 轻量级web故障自动切换keepalived
- 一些比较有意思的编程网站(1)
- hdu 1238 KMP+枚举
- java hibernate 将图片存入数据库,并从数据库取出显示在网页上
- 深度解析XML的结构与类映射
- Sencha Touch 实战开发培训 视频教程 第二期 第七节
- 编码社区推荐