题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路
- 将矩阵当做由多个圈组成,每个打印一个圈,每个圈的起点也就是
(start,start)
都满足这样一个条件,那就是(行数-1)> start * 2 && (列数-1) > start * 2
,因此把这个当做循环的终止条件,在循环中每次打印一个圈,直到打印完所有的圈(0,0),(1,1),(2,2)…… - 如何打印一圈?分别打印四个方向,判断每个方向是否有值需要打印(具体见代码)
AC代码
#include <iostream>
#include <vector>
using namespace std;
void print(vector<vector<int>> matrix, int start, vector<int> &res) //注意要传引用,因为这个res是个局部变量,传引用这样就会操作同一个res
{
int y = matrix.size() - start - 1; //表示矩阵中列
int x = matrix[matrix.size() - 1].size() - start - 1; //表示矩阵中的行
for (int i = start;