Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
题目解析:
(1)一开始希望找到每个数字对应的公式,后来没找到
(2)所以只能是比较简单的对每一圈进行赋值。
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int> > generateMatrix(int n) {
vector<int> temp(n,0);
vector<vector<int>> result(n,temp);
if(n<1)
return result;
int index = 1;
int cycles = 0;
while(n-2*cycles>1)
{
int row = cycles;
int col = cycles;
for(int i=0;i<n-2*cycles;i++)
{
result[row][col] = index;
index++;
col++;
}
col--;
for(int i=0;i<n-2*cycles-1;i++)
{
row++;
result[row][col] = index;
index++;
}
for(int i=0;i<n-2*cycles-1;i++)
{
col--;
result[row][col] = index;
index++;
}
for(int i=0;i<n-2*cycles-2;i++)
{
row--;
result[row][col] = index;
index++;
}
cycles++;
}
if(n-2*cycles == 1)
{
result[cycles][cycles] = n*n;
}
return result;
}
void printArrayList(vector<vector<int> > &result)
{
for(vector<vector<int>>::size_type i=0;i<result.size();i++)
{
vector<int> temp = result[i];
for(vector<int>::size_type j=0;j<temp.size();j++)
{
cout << temp[j] << " ";
}
cout << endl;
}
}
int main(void)
{
int n = 5;
vector<vector<int> > result = generateMatrix(n);
printArrayList(result);
system("pause");
return 0;
}