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;
}
本文介绍了一种生成螺旋矩阵的方法,给定整数 n,按螺旋顺序填充元素从1到 n² 的 n×n 矩阵。算法通过定义矩形边界并逐步缩小边界范围来实现矩阵填充。
814

被折叠的 条评论
为什么被折叠?



