注意细节。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> result;
int row = matrix.size();
if(row == 0) return result;
int col = matrix[0].size();
int startX = 0;
int startY = 0;
while(row > 0 && col > 0)
{
for(int i=0; i<col; i++)
result.push_back(matrix[startX][startY+i]);
for(int i=1; i<row-1; i++)
result.push_back(matrix[startX+i][startY+col-1]);
if(row-1 != 0)
{
for(int i=col-1; i>=0; i--)
result.push_back(matrix[startX+row-1][startY+i]);
}
if(col-1 != 0)
{
for(int i=row-2; i>=1; i--)
result.push_back(matrix[startX+i][startY]);
}
row -= 2;
col -= 2;
startX += 1;
startY += 1;
}
return result;
}
};
Spiral Matrix II
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int>> result(n, vector<int>(n));
if(n == 0) return result;
int startX = 0;
int startY = 0;
int val = 1;
while(n > 0)
{
for(int i=0; i<n; i++)
result[startX][startY+i] = val++;
for(int i=1; i<n-1; i++)
result[startX+i][startY+n-1] = val++;
if(n > 1)
{
for(int i=n-1; i>=0; i--)
result[startX+n-1][startY+i] = val++;
for(int i=n-2; i>=1; i--)
result[startX+i][startY] = val++;
}
n -= 2;
startX += 1;
startY += 1;
}
return result;
}
};