题目:

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

剑指offer得意之作——顺时针打印矩阵的更多相关文章

  1. 《剑指offer》顺时针打印矩阵

    本题来自<剑指offer> 顺时针打印矩阵 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 1 ...

  2. 剑指 Offer 29. 顺时针打印矩阵 + 蛇形矩阵 + 模拟 + 思维题

    剑指 Offer 29. 顺时针打印矩阵 Offer_29 题目描述: 题解分析: 题目的初衷是将这道题当做一个简单题处理 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一 ...

  3. 剑指 Offer 29. 顺时针打印矩阵

    剑指 Offer 29. 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出: ...

  4. 力扣 - 剑指 Offer 29. 顺时针打印矩阵

    题目 剑指 Offer 29. 顺时针打印矩阵 思路1 其实就是按照理解题目的意思一步步从外层到内层打印出来,同时将一个外层分成四个部分分步打印 可以用一个变量count来维护当前打印的第几层 判断打 ...

  5. 【剑指Offer】顺时针打印矩阵 解题报告(Python)

    [剑指Offer]顺时针打印矩阵 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  6. 【剑指offer】顺时针打印矩阵

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...

  7. 【Java】 剑指offer(29) 顺时针打印矩阵

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思 ...

  8. Go语言实现:【剑指offer】顺时针打印矩阵

    该题目来源于牛客网<剑指offer>专题. 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如,如果输入如下4 X 4矩阵:1 2 3 4 5 6 7 8 9 10 11 ...

  9. 剑指offer——29顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

随机推荐

  1. flume1.8 Interceptors拦截器(五)

    1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ...

  2. Vue中的$set的使用

    在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去: 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新 ...

  3. javaScript事件流是什么?

    一.事件 事件是文档或者浏览器窗口中发生的,特定的交互瞬间. 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字. 事件是javaScript和DOM之间交 ...

  4. Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

    前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...

  5. POJ 1426 Find The Multiple(数论——中国同余定理)

    题目链接: http://poj.org/problem?id=1426 Description Given a positive integer n, write a program to find ...

  6. POJ 3461 Oulipo(——KMP算法)

    Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...

  7. Laravel5中使用阿里大于(鱼)发送短信验证码

    在做用户注册和个人中心的安全管理时,我实现借助第三方短信平台(阿里大于(鱼))在Laravel框架中进行手机验证的设置:阿里大于,是阿里通信旗下优质便捷的云通信服务平台,整合了三大运营商的通信能力,为 ...

  8. JavaScript常见封装方法

    1.最简单的,使用变量,然后用匿名函数包裹,不封装 2.对象字面量简单封装(不完整的模块模式,因为无法达到变量.方法私有效果.不过确实有分离和组织代码的能力,也就算一种简略的模块模式的实现方式) va ...

  9. eclipse导入项目之后有感叹号

    说明项目的编译过程报错.导致原因:项目引入后,需要重新配置jar包路径. 1.右击你的项目-->Build Path-->Configure Build Path.... 2.在弹出的对话 ...

  10. es7重点笔记

    1,函数绑定运算符,用来取代call,apply,bind调用,写法:并排的双冒号(::),左边是对象,右边是函数 foo :: bar; // 等同于bar.bind(foo); 双冒号返回的还是原 ...