立志用最少的代码做最高效的表达


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

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100


核心:本质为画图推导题,将矩阵拆分为四个部分考虑,逐个击破!!!

public class 剑指Offer29_顺时针打印矩阵 {static class Solution {public int[] spiralOrder(int[][] matrix) {// 本质是规律题,拆分为四个部分考虑!!!int row = matrix.length;if(row == 0) return new int[0];int col = matrix[0].length;int[] res = new int[col*row];int num = 0;                        // res数组的下标int up = 0, right = col-1, down = row-1, left = 0;      // 四个坐标的参数while(num < col*row) {// 上for(int i = up; (i<=right) && (num<col*row); i++)   // 多加的限定条件,为了防止越界访问,单行或单列的情况res[num++] = matrix[up][i];up++;// 右for(int i = up; (i<=down) && (num<col*row); i++)res[num++] = matrix[i][right];right--;// 下for(int i = right; (i>=left) && (num<col*row); i--)res[num++] = matrix[down][i];down--;// 左for(int i = down; (i>=up) && (num<col*row); i--)res[num++] = matrix[i][left];left++;}return res;}}public static void main(String[] args) {//        int[][] m = new int[][]{{1,2,3},{4,5,6},{7,8,9}};// 奇数次序列
//        int[][] m = new int[][]{{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}};// 偶数次序列
//        int[][] m = new int[][]{{1,2,3,4},{12,13,14,5},{11,16,15,6},{10,9,8,7}};// 只有1个数
//        int[][] m = new int[][]{{1}};// 行列不等
//        int[][] m = new int[][]{{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};// 只有一行int[][] m = new int[][]{{1,2,3,4}};Solution solution = new Solution();int[] nums = solution.spiralOrder(m);for(int i = 0; i < nums.length; i++) {System.out.println(nums[i] + " ");}}
}

天若有情天亦老,人间正道是沧桑。     ——教员

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

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

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

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

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

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

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

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

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

  5. 【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 题意 输入一 ...

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

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

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

    一:题目 二:上码 class Solution {public:vector<int> spiralOrder(vector<vector<int>>& ...

  8. 【算法】剑指 Offer 29. 顺时针打印矩阵

    1,概述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6

  9. 剑指Offer(29)顺时针打印矩阵

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

最新文章

  1. ​2019年最新华为、BAT、美团、头条、滴滴面试题目及答案汇总
  2. 迭代法求解线性方程组
  3. CentOS+Nginx+PHP+Mysql(3)(转)
  4. ajax实现php验证码验证码,PHP验证码之Ajax验证实现方法_PHP教程
  5. 电子计算机的大脑核心是什么,戴君惕《人脑与电脑》初中说明文阅读题及答案...
  6. php制作404,利用thinkphp怎么制作一个404跳转页面
  7. win2K/win2003终端服务器超出最大允许连接数
  8. 等概率随机函数的实现(对立事件的产生)
  9. 机器学习笔记——偏差vs方差
  10. android开发ViewPager按比例显示图片(显示下一张图片的一部分)
  11. 笔记本电脑运行卡顿的真正原因和解决方案
  12. 745. 前缀和后缀搜索(每日一难phase2--day27)
  13. edge扩展下载失败解决办法
  14. 普华i-VirtualApp应用交付系统介绍
  15. Linux安装Rar软件与压缩、解压方法
  16. QQ邮箱不显示图片解决方案
  17. conda search cuda后没有版本10的问题
  18. pmsm什么意思_PMSM是什么意思
  19. Lucene搜索理论
  20. 滑稽树下你和我Average distance(树形dp求任意两点距离之和)

热门文章

  1. LeetCode解题的常见模式套路
  2. 聊聊C语言和指针的本质
  3. 看了这个高并发系统架构,才知道我对秒杀的误解有多深
  4. 浅析ProcessBuilder
  5. 一行代码搞定 GitHub 访问徽章
  6. C++中的继承(一)
  7. 与WebXR共同创建者Diego Marcos一起探讨沉浸式Web的未来(上)
  8. TEG《选择》乘风破浪 · 披荆斩棘
  9. 综述 | 生成对抗网络(GAN)在图网络中的应用
  10. 腾讯云入选云原生产业联盟首批理事单位 助力生态发展与产业落地