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

分析:可以把矩阵想象为若干个圈,用一个循环来打印矩阵,每次打印矩阵中的一个圈,如左图。设矩阵行rows,列是columns,打印第一圈左上角坐标是(0,0),第二圈左上角坐标是(1,1),以此类推注意到左上角的坐标中行标和列标总是相同的,选择矩阵中左上角(start,start)的一圈作为分析目标发现,循环继续的条件是columns>startX*2且rows>startY*2.

如何打印一圈,分为四步,即:1.从左到右打印一行;2.从上到下打印一列;3.从右到左打印一行;4.从下到上打印一列,注意的是最后一圈可能退化为只有一行、只有一列或只有一个数字,如右图所示,根据打印时每一步的前提条件,即可分析写出循环,代码如下

import java.util.*;
public class wr20printMatrix {static ArrayList<Integer> list=new ArrayList<>();public static ArrayList<Integer> printMatrix(int [][]matrix){int rows=matrix.length;//行int columns=matrix[0].length;//列int start=0;while(rows>start*2 && columns>start*2){printMatrixInCircle(matrix,rows,columns,start);start++;}return list;}public static void printMatrixInCircle(int [][]matrix,int rows,int columns,int start){int endRow=columns-start-1;//一行到尾部,表示列数int endColumns=rows-start-1;//一列到尾部,有几行
//      1.从左到右打印一行
//      打印一圈至少要一步for(int i=start;i<=endRow;i++){list.add(matrix[start][i]);}
//      2.从上到下打印一列
//      需要第二步前提是,终止行号大于起始行号if(start<endColumns){for(int i=start+1;i<=endColumns;i++){list.add(matrix[i][endRow]);}}
//      3.从右到左打印一行
//      需要第三步前提是,圈内至少有两行两列,即终止行号大于起始行号且终止列号大于起始列号if(start<endRow && start<endColumns){for(int i=endRow-1;i>=start;i--){list.add(matrix[endColumns][i]);}}
//      4.从下到上打印一列
//      需要第四步前提是至少有三行两列,即终止行号比起始行号大2且终止列号大于起始列号if(start<endColumns-1 && start<endRow){for(int i=endColumns-1;i>=start+1;i--){list.add(matrix[i][start]);}}}public static void main(String []args){int [][]array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};ArrayList<Integer> result=printMatrix(array);for(int i:result){System.out.print(i+" ");}}}

剑指offer--20.顺时针打印矩阵相关推荐

  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. 【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵

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

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

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

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

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

  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 ...

  10. 剑指offer之顺时针打印矩阵

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

最新文章

  1. 你管这破玩意叫 RDB
  2. 窗口消息——Windows核心编程学习手札之二十六
  3. win7 安装openssh_Win732位旗舰版老友纯净版安装OpenSSH的方法
  4. javascript——原型与原型链
  5. leetcode 49. 字母异位词分组(排序+hash)
  6. 你见过在地铁里哭的人吗?扎心了老铁!!
  7. modifying的博客
  8. 压缩之后神经网络忘记了什么?Google研究员给出了答案
  9. es6 方法的修饰器
  10. 封装ajax函数支持jsonp,ajax和jsonp复习
  11. xp ie清除css缓存,如何清空浏览器的CSS缓存
  12. TELEPORTSTONE.LUA --传送宝石
  13. VMware Workstation虚拟机安装及虚拟机搭建(内有虚拟机安装包及序列号和系统镜像)...
  14. 手机上不了电信宽带连接服务器无响应怎么办,当网页都打不开该怎么办?
  15. Rhythmbox中mp3中文乱码问题
  16. Jupyter Notebook又一懒人神器,拖拽生成Python代码
  17. Python学习记录 逻辑回归
  18. OSChina 周五乱弹 ——一句话总结程序员的2017
  19. 胸怀——勇气——智慧
  20. mysql典型安装和完全安装的区别_MySQL安装详解(安装版本mysql-5.5.25)

热门文章

  1. 「全屋智能」云米全屋互联网家电 vs 绿米全屋智能产品+服务
  2. POI-TL生成带有表格word的坑 POI重复依赖
  3. 系统准备工具 (Sysprep.exe) 实现OOBE用法
  4. python 12306登录_python爬虫--模拟12306登录
  5. android 气泡,Android Q 气泡
  6. 无人便利店沿用超高频RFID技术将快速布局全国
  7. 在微型计算机读写速度最快,只比U盘大一点 速度却要快不少!新款影驰移动SSD实战体验...
  8. 免费的C++库—备用记录
  9. 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
  10. c:/progra~1是什么??