题目描述

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

思路

边界条件参考这篇博客。个人认为本题目的核心考点在于边界条件的处理。遍历矩阵可以近似地视为周期遍历,即顺时针一圈作为一个“周期”,需要借助4个循环,这是问题解决的基本思路。之后,需要借助4个边界left、right、top和btm分别是左右上下边界,而且这是数组的实际边界!很明显,每次遍历完成后,需要一次“缩圈”的操作,即边界向中间靠拢。

最外层有一个大的循环,这个循环用于控制周期遍历的终止,很明显可以顺利执行的条件是left<right、top<btm。

最后就是特别麻烦的内部周期边界条件控制了。。。

  1. 从左向右这一个无论如何都要进行打印
  2. 从上到下,需要的边界是必须至少是两行才行,因此添加边界top<btm
  3. 从右到左,需要的边界是2的基础上,再保证至少2列,因此边界条件是top<btm && left<right
  4. 从下之上,需要的边界是至少2列,同时需要至少3行,因此边界条件是top+1<btm && left<right

编码时的边界条件处理还需要加强!!!!!

AC代码

class Solution {public:vector<int> printMatrix(vector<vector<int> > matrix) {vector<int>v;if(matrix.empty()) {return v;}int left = 0, right = matrix[0].size() - 1;int top = 0, btm = matrix.size() - 1;while(left <= right && top <= btm) {for(int i = left; i <= right; ++i) {v.push_back(matrix[top][i]);}if(top < btm) {for(int i = top + 1; i <= btm; ++i) {v.push_back(matrix[i][right]);}}if(top < btm && left < right) {for(int i = right - 1; i >= left; --i) {v.push_back(matrix[btm][i]);}}if(top + 1 < btm && left < right) {for(int i = btm - 1; i >= top + 1; --i) {v.push_back(matrix[i][left]);}}++left;--right;++top;--btm;}return v;}
};

剑指offer之顺时针打印矩阵相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

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

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

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

    题目 剑指offer的解题思路 顺时针打印矩阵,可以分解为每次打印一个数,顺序是从左到右,从上到下,然后从右到左,从下到上. 打印每一圈的起点(startX,startY)分别为(0,0),(1,1) ...

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

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 每次打印矩阵最外面的一圈(用方法printMatrix ...

  5. 剑指offer:顺时针打印矩阵

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

  6. 【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵

    立志用最少的代码做最高效的表达 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2, ...

  7. 剑指offer——29.顺时针打印矩阵(不熟)

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

  8. 【leetcode】剑指 Offer 29. 顺时针打印矩阵(shun-shi-zhen-da-yin-ju-zhen-lcof)(模拟)[简单]

    链接 https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/ 耗时 解题:38 min 题解:10 min 题意 输入一 ...

  9. 剑指offer 29 顺时针打印矩阵(可逆时针,任一点开始)

    原书上写的解太麻烦了,而且还没有扩展性(比如从右上角开始打印,或者逆时针打印). 此外多个for循环的起止点也让人头晕,每个方向都要单独判断步进方向,因此代码也缺少优雅性. 这里我用direction ...

最新文章

  1. 如何把本地项目上传到Github上面(详细版)
  2. 【jquery】select下拉框赋值
  3. 腾达W303R v3 无线路由器使用移动光纤无法打开视频的设置方法
  4. python增删改查csv文件_【练习】Python第四次:实现对文件的增删改查
  5. java13性能,Spring Boot 2.2.0,性能提升+支持Java13
  6. linux命令cp -a,linux命令_ls命令与cp命令详解(一)
  7. 云计算与虚拟化了解二三事
  8. python 分段拟合(curve fit)
  9. C#中调用Windows API的要点 .
  10. 快速切换ip没必要用工具
  11. 计算机系统导论与计算机导论,计算机系统导论之学习心得
  12. 常用软件的安装与卸载
  13. 输入一个小写字母变成下一个小写字母(z变a)
  14. 问题 1125: 【C语言训练】委派任务*【最优解】
  15. 超强干货:企业数据防泄密的26种实用方法
  16. 【淘宝SEO】淘宝官方SEO资料
  17. git did not exit cleanly (exit code 128)处理方式
  18. 神经网络和图神经网络,神经网络的图怎么画
  19. 求选修了学号为“95001”学生所学过的所有课程的学生学号和姓名
  20. linux安装宝塔面板命令大全

热门文章

  1. 高阻态是0还是1_羽毛球拍穿线,先拉横线还是竖线?是否横线要比竖线高1到2磅?...
  2. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
  3. python invalid syntax string_Python报错,“SyntaxError: invalid syntax”
  4. 计算机视觉CV中的论文写作英语(by Youki)
  5. Anaconda——Youki常用的conda命令笔记
  6. 机器学习、深度学习资料推荐
  7. leetcode693:Binary Number with Alternating Bits
  8. 东大OJ-1588: Routing Table
  9. 深度学习之激活函数篇(Sigmoid、tanh、ReLU、PReLU)
  10. 打包部署时jar包和war包的区别