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

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

转载于:https://www.cnblogs.com/dplearning/p/4635075.html

【剑指offer】题目20 顺时针打印矩阵相关推荐

  1. LeetCode——剑指 Offer 29【顺时针打印矩阵】

    题目 剑指 Offer 29. 顺时针打印矩阵 题目概述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 限制: 0 <= matrix.length <= 100 0 & ...

  2. 【剑指offer】登峰造极--顺时针打印矩阵

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:747888 本题知识点: 数组 算法知识视频讲解 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序 ...

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

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

  4. 【有返回值的回溯法】剑指offer——面试题66:矩阵中的路径(回溯法)

    剑指offer--面试题66:矩阵中的路径(回溯法) Solution:1 典型的回溯算法及代码 此题是回溯法的典型例题,思路以及代码均是书中所讲.要具体实现很有参考价值,借鉴之! 现在把书中代码贴在 ...

  5. 【剑指offer-Java版】20顺时针打印矩阵

    顺时针打印矩阵:重在理解,毕竟作者分析的那个方法看起来还是蛮复杂的-所以自己写了个接地气的方法 重在逻辑的一个题,一次性完全写对还是比较困难的 public class _Q20 {public vo ...

  6. java剑指offer_剑指offer题目java实现

    Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 1 packageProblem2;2 3 public classSingletonClass {4 ...

  7. 剑指Offer题目详解(CPP、JAVA)

    2019.10.11更新 最近开始学习c++,在本文中增加c++的解法,并更新一部分题目的解法. 前言(2018.6.1) 虽然已经度过了艰辛的找实习的日子,到了公司实习.但依然非常怀念那段准备面试. ...

  8. 剑指offer题目及答案

    剑指offer 最近在牛客网上刷剑指offer的题目,现将题目和答案总结如下: 1. 二维数组的查找 2. 替换空格 3. 从尾到头打印链表 4. 重建二叉树 5. 用两个栈实现队列 6. 旋转数组的 ...

  9. 剑指 offer 题目分析及答案

    1. 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到头打印链表 7. 重建二叉树 8. 二叉树的下一个结点 9. 用两个栈实现队列 ...

  10. 剑指offer答案 c语言,剑指offer 题目整理

    合并两个排序的链表(25)[打分: 7.5/10] leetcode原题,去东京的飞机上写过.迭代好写,递归难写. 树的子结构(26) [打分: 7.5/10] leetcode原题.子树和子结构不同 ...

最新文章

  1. Eclipse create git repository failure(egit)
  2. 这是一份非常全面的开源数据集!
  3. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转
  4. 解析Linux 多应用程序docker自动部署脚本
  5. P1005 采药(Tyvj)
  6. 作者:张晴晴,山东农业大学硕士生。
  7. amaze ui响应式辅助
  8. shell 不等于_Shell 布尔运算符与逻辑运算符
  9. python tkinter背景图片_如何在tkinter中有背景图像和按钮?
  10. oracle使用小技巧,Oracle使用技巧
  11. 在JavaScript中使用JSON
  12. 并发编程学习之线程池工作原理
  13. 如何让图片变清晰——PS滤镜Camera Raw帮你解决
  14. 面向对象课程 第三次博客总结
  15. 【python】OpenCV—RGB, Rectangle, Circle, SS(1)
  16. working directory is not part of a module
  17. C# 怎么把集合转换成数据库添加语句,把类转换成sql语句
  18. 多可文档管理的数据备份
  19. 端口映射工具之80端口映射软件无公网IP时发布网站应用等应用
  20. 程序人生:Facebook的23岁创始人

热门文章

  1. mac下载站,这个可以收藏看看
  2. Mac 启动时屏幕上的特殊图像标识都是什么意思
  3. 数组reduce()方法
  4. 面向对象的思考过程 (马特·魏斯费尔德 著)
  5. NoSQL数据库概览及其与SQL语法的比较
  6. MANIFEST.MF文件的编辑注意事项
  7. 信息系统项目管理系列之六:项目范围管理
  8. maven 多环境打包发布的两种方式
  9. FL Studio20.8中文完整版本覆盖升级更新说明介绍v20.8.3
  10. 令人笑喷的56个代码注释,最后几个老衲实在憋不住了。。。