题解 | #螺旋矩阵#
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> result;
int ranks=matrix.size();
if (ranks == 0)
return {};
int columns=matrix[0].size();
int left=0,right=columns-1,up=0,down=ranks-1;
int count=0;
while (true)
{
for(int i=left;i<=right;i++)
{
result.push_back(matrix[up][i]);
count++;
if (count == ranks*columns)
return result;
}
up++;
for (int i = up; i <=down ; i++)
{
result.push_back(matrix[i][right]);
count++;
if (count == ranks*columns)
return result;
}
right--;
for (int i = right; i >= left ; i--)
{
result.push_back(matrix[down][i]);
count++;
if (count == ranks*columns)
return result;
}
down--;
for (int i = down; i >= up ; i--)
{
result.push_back(matrix[i][left]);
count++;
if (count == ranks*columns)
return result;
}
left++;
}
}
};
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> result;
int ranks=matrix.size();
if (ranks == 0)
return {};
int columns=matrix[0].size();
int left=0,right=columns-1,up=0,down=ranks-1;
int count=0;
while (true)
{
for(int i=left;i<=right;i++)
{
result.push_back(matrix[up][i]);
count++;
if (count == ranks*columns)
return result;
}
up++;
for (int i = up; i <=down ; i++)
{
result.push_back(matrix[i][right]);
count++;
if (count == ranks*columns)
return result;
}
right--;
for (int i = right; i >= left ; i--)
{
result.push_back(matrix[down][i]);
count++;
if (count == ranks*columns)
return result;
}
down--;
for (int i = down; i >= up ; i--)
{
result.push_back(matrix[i][left]);
count++;
if (count == ranks*columns)
return result;
}
left++;
}
}
};