您的位置:首页 > Web前端

[剑指offer]顺时针打印矩阵

2016-04-26 13:52 288 查看


题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

分析:其实之前也做过类似题,之前是一个正方形矩阵,现在换成长宽不一定相等的了。定义四个变量固定打印的对角线的角,然后依次打印就可以了。要注意过程中不能重复打印和缺少元素。

class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int>ret;
int m=matrix.size();
int n=matrix[0].size();
if(m==0||n==0) return ret;
int row1=0;
int row2=m-1;
int col1=0;
int col2=n-1;
while(row1<=row2&&col1<=col2){
for(int i=col1;i<=col2;i++){
ret.push_back(matrix[row1][i]);
}
for(int i=row1+1;i<=row2;i++){
ret.push_back(matrix[i][col2]);
}
if(row2!=row1){
for(int i=col2-1;i>=col1;i--){
ret.push_back(matrix[row2][i]);
}
}
if(col2!=col1){
for(int i=row2-1;i>row1;i--){
ret.push_back(matrix[i][col1]);
}
}

row1++;
row2--;
col1++;
col2--;
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: