与Spiral Matrix 思路完全相同,只需稍作修改即可
代码
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> > result(n, vector<int>(n));
if(n==0)
return result;
if(n==1)
{
result[0][0] = 1;
return result;
}
int start = 0;
int num = 1;
while(start*2<n&&start*2<n)
{
generateMatrixHelper(result, n, start, num);
start++;
}
return result;
}
void generateMatrixHelper(vector<vector<int> > &result, int n, int start, int &num)
{
int endX = n - start -1;
int endY = n - start -1;
//from left to right
for(int i = start; i <= endY; ++i)
{
result[start][i] = num++;
}
//from top to bottom
if(start < endX)
{
for(int j = start+1; j <= endX; ++j)
{
result[j][endY] = num++;
}
}
//from right to left
if(start < endX && start < endY)
{
for(int i = endY-1; i >= start; --i)
result[endX][i] = num++;
}
//from bottom to top
if(start < endY && start < endX-1)
{
for(int j = endX-1; j > start; --j)
result[j][start] = num++;
}
}
};