题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
分析:
这题是牛客网剑指offer的第十九题。顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向左打印的时候是否会出现重复打印。同样
只包含一列时,要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况。其实这个思路很好理解,自己画个图就知道了。但是在coding的时候,在最后几个for‘循环的条件处我卡到了。最后还是看
了大佬们的代码发现自己的循环条件少了一点。最后也AC了。
此处我也想说点题外话,记录一下自己这大约一年来的日子。距离我上次写博客已经8个多月了,那时我正开始准备考研。漫漫考研路,肯定是不那么轻松的。emmm代码也写的少(几乎没写过)。牛客网的剑指
offer我是考完研的时候刷的,最开始的一个月都没怎么写,最近是因为成绩出来了,不太好,对自己对学校都不满意,才开始写代码的。至于结果我想:尽不尽力,好还是不好,真的我不是很在意了。就算没考
上研,找到一个好工作我认为都是挺失败的。长远来看,研究生对思维系统的训练是公司无法给你的。毕竟人生的低谷啦,谁没有呢,是吧?不管接下来是二战还是工作,还是边工作边二战都是自己的选择。在
这个阶级固化的今天,无话可说。剑指offer已经刷一半了,做的还是一些我觉得偏简单的题,尽力吧,沉下心来。能升华多少是多少。不知道下次看到这篇文章是何时何地何种心态,开心最重要啦。反正我觉
得AC的味道最爽啦。
话说回来,这题是我觉得比较好的题,思路不算难,实现起来还是挺麻烦的。算是自己在剑指offer里面比较有成就感的一道题了。话不多说了,贴上代码也感谢下别人的代码,毕竟有大佬们的启发。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int hang=matrix.size();
int lie=matrix[0].size();
vector<int> res;
res.clear();
int k=0;
if(hang>lie)
{
if(lie%2==1)
k=lie/2+1;
else
k=lie/2;
}
else
{
if(hang%2==1)
k=hang/2+1;
else
k=hang/2;
}
for(int i=0;i<k;i++)
{
for(int a=i;a<lie-i;a++)
{
res.push_back(matrix[i][a]);
}
for(int b=i+1;b<hang-i;b++)
{
res.push_back(matrix[b][lie-i-1]);
}
for(int c=lie-i-2;(c>=i)&&(hang-i-1!=i);c--)
{
res.push_back(matrix[hang-i-1][c]);
}
for(int d=hang-i-2;(d>i)&&(lie-i-1!=i);d--)
{
res.push_back(matrix[d][i]);
}
}
return res;
}
};
原文地址:https://www.cnblogs.com/CIan-722/p/8445741.html