题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[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]
题解:四个指针
代码
/*
描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[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]
*/
#include<iostream>
using namespace std;
#include<vector>
vector<int> printMatrix(vector<vector<int> > matrix) {
int left = 0;
int right = matrix[0].size() - 1;//矩阵最右边
int top = 0;//矩阵最顶行
int botton = matrix.size() - 1;//矩阵最底行
vector<int> v;
while (true) {
for (int i = left; i <= right; i++) {
v.push_back(matrix[top][i]);
cout << matrix[top][i] <<" i="<<i<< endl;
}
top++;
if (top > botton) break;
cout << botton << endl;
for (int i = top; i<= botton; i++) {
v.push_back(matrix[i][right]);
}
right--;//注意:这里是减
if (right < left) break;
for (int i = right; i >= left; i--) {
v.push_back(matrix[botton][i]);
}
botton--;//注意:这里是减
if (botton < top) break;
for (int i = botton; i >= top; i--) {
v.push_back(matrix[i][left]);
}
left++;
if (left > right) break;
}
return v;
}
int main() {
vector<vector<int>> matrix = { {1,2,8,9},
{2,3,9,12},
{4,7,10,13},
{6,8,11,15} };
vector<int> v;
v = printMatrix(matrix);
for (int i = 0; i < v.size();i++) {
cout << v[i] << " ";
}
system("pause");
return 0;
}