题目描述


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