思路:将左上和右下的坐标定位,依次旋转打印出数据,一次旋转后,就将坐标分别前进和后退一个单位,把要打印的数据范围缩小。
实现代码:
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int left=0;
int right=matrix[0].size()-1;
int top=0;
vector<int> res;
int i=0;
int down=matrix.size()-1;
if(matrix.size()==0||matrix[0].size()==0){
return res;
}
while(left<=right&&top<=down){
for( i=left;i<=right;i++){
res.push_back(matrix[top][i]);
}
for(i=top+1;i<=down;i++){
res.push_back(matrix[i][right]);
}
if(top!=down){
for(i=right-1;i>=left;i--){
res.push_back(matrix[down][i]);
}
}
if(right!=left){//此处判断是为了防止单行或者单列的情况
for(i=down-1;i>top;i--){
res.push_back(matrix[i][left]);
}
}
left++;
top++;
right--;
down--;
}
return res;
}
};