输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

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.

思路:

关键注意①每一圈中四条边的边界,要每一次都打印到这一条边的末尾。右边的策略是错的,因为在只有一行一列时每一条边都判定该元素是下一条边的,导致错误。

                     

②下面的边和左边的边还需要判断跟上面的边或右边的边是否重复。防止只有一行或者只有一列时出现重复。

vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> ans;
if(matrix.empty()) return ans;
int m = matrix.size();
int n = matrix[].size();
int r, c;
for(int k = ; k <= (min(m, n) - ) / ; k++) //打印的圈数 最外圈为第0圈
{
//从左到右 最上面的那条边
r = k;
for(c = k; c <= n - - k; c++)
ans.push_back(matrix[r][c]);
//从上到下 最右边的那条边
c = n - - k;
for(r = k + ; r <= m - - k; r++)
ans.push_back(matrix[r][c]);
//从右到左 最下面的那条边
r = m - - k;
for(c = n - - k; c >= k && r > k; c--) //需要判断与上面的边不重合
ans.push_back(matrix[r][c]);
//从下到上 最左边的那条边
c = k;
for(r = m - - k; r >= k + && c < n - - k; r--) //需要判断与右边的边不重合
ans.push_back(matrix[r][c]); } return ans;
}

【剑指offer】题目20 顺时针打印矩阵的更多相关文章

  1. 剑指offer-面试题20.顺时针打印矩阵

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

  2. 剑指offer系列17---顺时针打印矩阵(不是很懂)

    package com.exe4.offer; import java.util.ArrayList; /** * 17[题目]输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果 ...

  3. 剑指offer系列18---顺时针打印矩阵

    [题目]定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.要求时间复杂度是O(1).push pop min [思路]设计一个辅助栈,当新加入的原数据栈中的数小于辅助栈顶的数时就加 ...

  4. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  5. 【剑指Offer】剑指offer题目汇总

      本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...

  6. 代码题 — 剑指offer题目、总结

    剑指offer题目总结:  https://www.cnblogs.com/dingxiaoqiang/category/1117681.html 版权归作者所有,任何形式转载请联系作者.作者:马孔多 ...

  7. 剑指Offer - 九度1515 - 打印1到最大的N位数

    剑指Offer - 九度1515 - 打印1到最大的N位数2013-11-30 01:11 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案 ...

  8. 【剑指Offer】把二叉树打印成多行 解题报告(Python)

    [剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  9. 剑指offer题目系列三(链表相关题目)

    本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...

随机推荐

  1. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  2. [译]Profile and debug your ASP.NET MVC app with Glimpse

    原文:http://www.asp.net/mvc/overview/performance/profile-and-debug-your-aspnet-mvc-app-with-glimpse Gl ...

  3. MongoDB MapReduce学习笔记

    http://cnodejs.org/topic/51a8a9ed555d34c67831fb8b http://garyli.iteye.com/blog/2079158 MapReduce应该算是 ...

  4. 在使用开源library的PullToRefreshView中

    下拉刷新几乎是每个应用都会有的功能,且大部分用的都是开源项目,下载地址:下拉刷新.如何在页面刚打开的时候自动触发下拉刷新的呢? 只需要一句代码,在PullToRefreshAdapterView Ba ...

  5. redis-key2

    package com.ztest.redis; import java.util.List; import redis.clients.jedis.Jedis; import com.sun.ist ...

  6. centos: vmware 安装centos 7连不上网

    在vmware上安装centos 7时,安装完成后无法连接网络,通过搜索查找原来是有线网卡没有激活,默认情况下centos和redhat都不启用有线网卡,只能手动开启或者安装时直接启用. 1.进入命令 ...

  7. bug-android之app:mergeDebugResources

    bug描述:Error:Execution failed for task ':app:mergeDebugResources'. > Crunching Cruncher seekbar_th ...

  8. SPOJ 375 Query on a tree

    Description 给出一个树,每条边有边权,支持两种操作,询问 \(u,v\) 路径上边权最大值,修改第 \(i\) 条边的边权,\(n\leqslant 10^4,T\leqslant 10\ ...

  9. U盘安装ubuntu server 14.04

    U盘安装ubuntu server 14.04 U盘安装ubuntu server 14.04 1.制作启动u盘 2.开始安装 1 将u盘插入主机,重启后从u盘启动 2 选择语言(随便挑,随便选),我 ...

  10. Ubuntu14.04安装intel集显驱动

    Ubuntu14.04安装intel集显驱动 标签(空格分隔): ubuntu linux 驱动安装 1.查看本机显卡型号 使用lspci命令来获取PCI接口硬件信息 o@o-pc:~$ lspci ...