题目:
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 ] ]
题目来源:https://oj.leetcode.com/problems/spiral-matrix-ii/
解题思路:同 Spiral Matrix (leetcode)#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> > generateMatrix(int n)
{
if(n<=0)
return vector<vector<int> >();
vector<vector<int> > matrix(n,vector<int>(n,0));;
int row=0,col=0,k=0;
while(1)
{
if(row>((n-1)>>1))//行和列是相等的,而且矩阵是方阵,不用判断列了
break;
for(int i=col;i<matrix.front().size()-col;i++)
matrix[row][i]=++k;
for(int i=row+1;i<matrix.size()-row;i++)
matrix[i][matrix.size()-col-1]=++k;
if(matrix.size()==row*2+1)//即当前的行是一个独行
break;
for(int i=matrix.size()-col-2;i>=col;i--)
matrix[matrix.size()-row-1][i]=++k;
if(matrix.size()==col*2+1)//即当前的列是一个独列
break;
for(int i=matrix.size()-row-2;i>row;i--)
matrix[i][col]=++k;
row++;
col++;
}
return matrix;
}
int main()
{
const int N=3;
vector<vector<int> > result=generateMatrix(N);
system("pause");
return 0;
}