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 ] ]
解题思路:确定矩形边框,通过数字递增顺序填写,进而改变矩形边框的大小。最后通过判定边框的大小关系结束遍历.
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> > generateMatrix(int n) {
vector<int>ResultRow(n, 0);
vector<vector<int> >ResultData(n, ResultRow);
int rectangleLeft = 0;
int rectangleRight = n - 1;
int rectangleAbove = 0;
int rectangleDown = n - 1;
int data_count = 0;
while (true)
{
//上边界
for (int i = rectangleLeft; i <= rectangleRight;++i)
ResultData[rectangleAbove][i] = ++data_count;
if (++rectangleAbove > rectangleDown)
break;
//右边界
for (int i = rectangleAbove; i <= rectangleDown; ++i)
ResultData[i][rectangleRight] = ++data_count;
if (--rectangleRight < rectangleLeft)
break;
//下边界
for (int i = rectangleRight; i >= rectangleLeft; --i)
ResultData[rectangleDown][i] = ++data_count;
if (--rectangleDown < rectangleAbove)
break;
//左边界
for (int i = rectangleDown; i >= rectangleAbove; --i)
ResultData[i][rectangleLeft] = ++data_count;
if (++rectangleLeft > rectangleRight)
break;
}
return ResultData;
}