您的位置:首页 > 其它

顺时针打印矩阵

2017-06-28 11:04 204 查看
题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

分析

本题的解决策略是:设置上下左右四个边界,打印数据时遵循瞬时值方向,遇到边界则改变方向,当上下边界重合或者左右边界重合时退出循环。

C++代码实现如下:

vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
if(matrix.size()== 0) return res;
const int row = matrix.size();
const int col = matrix[0].size();
int up = 0,down = row -1 ,left = 0,right = col-1;
while(up<=down&&left<= right){
for(int i = left;i<right;i++) res.push_back(matrix[up][i]);
for(int i=up+1;i<=down) res.push_back(matrix[i][right]);
if(down!=up){
for(int i = right-1;i>=left;i--) res.push_back(matrix[down][i]);
}
if(left!=right){
for(int i = down-1;i>up;i--) res.push_back(matrix[i][left]);
}
up++;right--;down--;left++;
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: