从一个萌新的视角谈及自己遇到的错误,以及对题目的理解。
先考虑I/O,用一个vector<int>输出
其次遍历用到的上下左右。
最好是画一个图,就能看出遍历了一行,就要改变上下,遍历了列改变左右。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> output;
int i,j;
int up=0,left=0;
int down = matrix.size()-1;//这个地方我没有加-1,出现段错误
int right = matrix[0].size()-1;//段错误,因为后面的matrix会访问到这一位,但是发现没有分配内存。
while(1){
for(i=left;i<=right;i++){
output.push_back(matrix[up][i]);
}
up++;
if(up>down)
break;
for(i=up;i<=down;i++)
{
output.push_back(matrix[i][right]);
}
right--;
if(right<left)
break;
for(i=right;i>=left;i--)
{
output.push_back(matrix[down][i]);
}
down--;
if(down<up)
break;
for(int i=down;i>=up;i--)
{
output.push_back(matrix[i][left]);
}
left++;
if(left>right)
break;
}
return output;
}
};</int></int></int></int>