出错原因:
有for循环或者while时,没有考虑数组为空的情况,且将判断数组为空条件写在比较靠下的位置了,比如下面时错误的:
参考文章:
/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]);;}}}};