题目:输入一个矩阵,按照从外向里以顺时针的顺序依次扫印出每一个数字

这个题目的思想不是特别难,一圈分成4步即可,然后分情况讨论,但是分情况的讨论的时候就特别麻烦,所以自己还是没有能力编写出来,只能考培大神的代码了。

package 剑指offer;
/*题目:输入一个矩阵,按照从外向里以顺时针的顺序依次扫印出每一个数字*/
/*因此我们要仔细分析打印时每一步的前提条件。第一步总是需要的, 因为打印一圈至少有一步。如果只有一行,那么就不用第二步了。* 也就是需要 第二步的前提条件是终止行号大于起始行号。需要第三步打印的前提条件是圈内至少有两行两列,也就是说除了要求* 终止行号大于起始行号之外,还要求终止列号大于起始列号。同理,需要打印第四步的前提条件是至少有三行两列,因此要求终* 止行号比起始行号至少大2 , 同时终止列号大于起始列号。*/
public class Test20 {public static void main(String args[]){int[][] numbers = {{1, 2, 3, 4, 5},{16, 17, 18, 19, 6},{15, 24, 25, 20, 7},{14, 23, 22, 21, 8},{13, 12, 11, 10, 9},};printArrayWisely(numbers);System.out.println();}public static void printArrayWisely(int [][] num){if(num == null){return ;}int x = 0;int y = 0;// 行号最大是(num.length-1)/2// 列号最大是(num[0].length-1)/2while(x*2 < num.length && y*2 < num[0].length){printNewInCircle(num, x, y);x++;y++;}}public static void printNewInCircle(int [][]num, int x, int y){int row = num.length; // 矩阵的行数int col = num[0].length; // 矩阵的列数// 第一步输出最上面一行的所以元素// 是按列来输出的for(int i = y; i <= col - y - 1; i++){System.out.print(num[x][i]+" ");}// row-x-1:表示的是环最下的那一行的行号// 第二步,打印最右边, 使用自上向下的方式if(row - x - 1 > x){for (int i = x + 1; i <= row - x - 1; i++) {System.out.print(num[i][col - y - 1] + " ");}}// 第三步,打印最下面的一行,但是去除第一个元素// col - 1 - y > y 这句是保证有列数if (row - x - 1 > x && col - 1 - y > y) {// 因为环的左下角的位置已经输出了,所以列号从col-y-2开始for (int i = col - y - 2; i >= y; i--) {System.out.print(num[row - 1 - x][i] + " ");}}// 第四步,在保证有列数的同时,还要保证有行数,// 环的宽度至少是2并且环的高度至少是3才会输出最左边那一列// rows-x-1:表示的是环最下的那一行的行号if (col - 1 - y > y && row - 1 - x > x + 1) {// 因为最左边那一列的第一个和最后一个已经被输出了for (int i = row - 1 - x - 1; i >= x + 1; i--) {System.out.print(num[i][y] + " ");}}}}

附上大神博客:http://blog.csdn.net/derrantcm/article/details/46691057

剑指offer17--旋转的方式打印矩阵相关推荐

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

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

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

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

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

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

  4. 剑指offer06.从尾到头打印链表

    剑指offer06.从尾到头打印链表 1. 改变链表结构的解法 2.可以使用栈,递归,或者直接反向输出数组 提示: 若是面试遇到此题,最好先向面试官确认是否可以改变链表的结构, 1. 改变链表结构的解 ...

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

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

  6. JavaScript——leetcode剑指06 从尾到头打印链表

    JavaScript--leetcode剑指06从尾到头打印链表 题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出: ...

  7. 剑指offer 旋转数组的最小数字

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...

  8. 《剑指offer》c++版本 12. 矩阵中的路径

    如题,牛客网上题目没有图示,下图是从原书中截图得到的. 本题就是从数组中按照指定方向查找字符序列,典型的回溯行为,找到当前字符,继续查找该字符上下左右四个方向,找不到,返回上一个字符,重新查找.题目要 ...

  9. 剑指 Offer打卡 数组与矩阵

    二维数组中的查找 public class Solution {public static void main(String[] args) {System.out.println(new Solut ...

  10. 剑指offer:面试题12. 矩阵中的路径

    题目:矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一 ...

最新文章

  1. Python-编码之大彻大悟
  2. 微软AI要参加IMO竞赛!小目标:数学金牌
  3. CentOS系统安装配置JDK
  4. 编译hadoop的eclipse插件hadoop-eclipse-plugin-1.2.1.jar
  5. GDCM:将PAPYRUS 3.0文件转换为dcm文件的的测试程序
  6. 浅谈关于nil和 null区别及相关问题
  7. 精英计算机主板,精英电脑发布顶级P965芯片组主板
  8. [PyTorch] 记录一次PyTorch版本更新
  9. js 将简体字转化成繁体字
  10. c++filt识别C++中的函数重载
  11. CountDownLatch:别浪,等人齐再团!
  12. 转 C++压缩解压之snappy
  13. 山东法律学校97级计算机班,我校计算机学院97级计算机专业校友重聚母校
  14. Oracle数据库查询有多少表格,Oracle数据库的表有多大呢?
  15. onlyoffice5.4.2离线包的制作—解决中文字体问题
  16. 智慧矿山无人驾驶模块
  17. [Practical.Vim(2012.9)].Drew.Neil.Tip94 学习摘要
  18. zuul 详解,带视频
  19. 计算机教师面试专业技能部分,教师招聘考试面试,专业技能测试考什么?全在这了...
  20. NC57 开发小结篇

热门文章

  1. Python量化交易策略及回测系统
  2. imap接收邮件服务器,配置 Outlook 从 IMAP 服务器接收邮件
  3. html字体如何运用在ps上,PS文字排版工具的使用技巧
  4. 2018年世界杯助力优酷重返第一,也成为视频行业的分水岭
  5. IT前沿技术之node.js篇七:Node.js与HBase
  6. c语言中fn等于1,Fibonacci数列的递推公式:Fn=Fn-1 + Fn-2,其中F1=F2=1
  7. 制作u盘winpe启动盘_Ventoy启动盘制作工具,Win、Linux、PE多系统镜像装进同1个U盘...
  8. 小世界网络和复杂网络+python代码实现
  9. 苹果笔记本风扇测试软件,实用的mac电脑风扇控制软件 Macs Fan Control Pro
  10. Java 汉字 转 拼音/首字母