出错原因:
有for循环或者while时,没有考虑数组为空的情况,且将判断数组为空条件写在比较靠下的位置了,比如下面时错误的:
参考文章:
https://blog.youkuaiyun.com/qq_36421001/article/details/113749195
错误
class Solution {
public:
vector<int>result;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
result.clear();
int m=matrix.size();
int n=matrix[0].size();
if(matrix.empty())
return {};
int count=0;
//执行出错时 是空矩阵情况,所以还要考虑一下
while(m>count*2 &&n>count*2)
{
print(matrix,m,n,count);
count++;
}
return result;
}
void print(vector<vector<int>>& matrix,int row,int col,int count)
{
//从左到右打印一行
for(int i=count,j=count;j<col-count;j++)
{
result.push_back(matrix[count][j]);
}
//从上到下
if(count<row-count-1)
{
for(int i=count+1;i<row-count;i++)
{
result.push_back(matrix[i][col-count-1]);
}
}
//从右到左
if(count<col-count-1 && count<row-count-1)
{
for(int i=col-count-2;i>=count;i--)
{
result.push_back(matrix[row-count-1][i]);
}
}
//从下到上
if(count<col-count-1 && count<row-count-2)
{
for(int i=row-count-2;i>=count+1;i--)
{
result.push_back(matrix[i][count]);;
}
}
}
};
改成
class Solution {
public:
vector<int>result;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
result.clear();
if(matrix.empty())
return {};
int m=matrix.size();
int n=matrix[0].size();
int count=0;
//执行出错时 是空矩阵情况,所以还要考虑一下
while(m>count*2 &&n>count*2)
{
print(matrix,m,n,count);
count++;
}
return result;
}
void print(vector<vector<int>>& matrix,int row,int col,int count)
{
//从左到右打印一行
for(int i=count,j=count;j<col-count;j++)
{
result.push_back(matrix[count][j]);
}
//从上到下
if(count<row-count-1)
{
for(int i=count+1;i<row-count;i++)
{
result.push_back(matrix[i][col-count-1]);
}
}
//从右到左
if(count<col-count-1 && count<row-count-1)
{
for(int i=col-count-2;i>=count;i--)
{
result.push_back(matrix[row-count-1][i]);
}
}
//从下到上
if(count<col-count-1 && count<row-count-2)
{
for(int i=row-count-2;i>=count+1;i--)
{
result.push_back(matrix[i][count]);;
}
}
}
};