题目描述

给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。

解题思路:

使用计算输出的方法,先处理上面一行,再处理右面一列,再处理下面一行,再处理左边一列,这是一个处理流程,一直这样操作,直到所有的元素都处理完成。

示例:

输入

[[1,2,3],[4,5,6],[7,8,9]]

返回值

[1,2,3,6,9,8,7,4,5]
import java.util.ArrayList;public class SpiralOrderMe {public static void main(String[] args) {int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};SpiralOrderMe spiralOrderMe = new SpiralOrderMe();spiralOrderMe.spiralOrder2(arr);}/** {1, 2, 3, 4},* {5, 6, 7, 8},* {9,10,11,12}*/public ArrayList<Integer> spiralOrder2(int[][] matrix) {ArrayList<Integer> result = new ArrayList<>(50);if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return result;}// 只有一行的情况if (matrix.length == 1) {for (int i : matrix[0]) {result.add(i);}return result;}if (matrix[0].length == 1) {for (int i = 0; i < matrix.length; i++) {result.add(matrix[i][0]);}return result;}// 计算有多少圈int row = matrix.length;int col = matrix[0].length;int cycle = row < col ? row : col;cycle = (cycle + 1) / 2;int round = 0;int left = 0;int right = matrix[0].length - 1;int top = 0;int down = matrix.length - 1;// 总元素个数int total = col * row;int count = 0;while (round < cycle) {// 上面一行for (int i = left; i <= right && count < total; i++) {count++;result.add(matrix[round][i]);}top++;// 右边一列for (int i = top; i <= down && count < total; i++) {count++;result.add(matrix[i][col - round - 1]);}right--;// 底下一行for (int i = right; i >= left && count < total; i--) {count++;result.add(matrix[row - round - 1][i]);}down--;// 左边一列for (int i = down; i >= top && count < total; i--) {count++;result.add(matrix[i][round]);}left++;round++;}return result;}}

常考数据结构与算法:螺旋矩阵m*n相关推荐

  1. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  2. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  3. 常考数据结构与算法:最长公共子串

    题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 示例1 输入 "1AB2345CD","1 ...

  4. 数据结构与算法--螺旋矩阵

    题目:给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix .(来源:https://leetcode-cn.com/pro ...

  5. 常考数据结构与算法:删除链表的倒数第n个节点

    题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...

  6. 常考数据结构与算法:找到字符串的最长无重复字符子串

    题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...

  7. 常考数据结构与算法:最大正方形

    题目描述 给定一个由0和1组成的2维矩阵,返回该矩阵中最大的由1组成的正方形的面积 示例1 输入 [[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]] 返 ...

  8. 常考数据结构与算法:两个链表生成相加链表

    题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 例如:链表 1 为 9->3->7,链表 ...

  9. 常考数据结构与算法:买卖股票的最好时机

    题目描述 假设你有一个数组,其中第 i 个元素是股票在第i 天的价格. 你有一次买入和卖出的机会.(只有买入了股票以后才能卖出).请你设计一个算法来计算可以获得的最大收益. 示例 1: 输入: [8, ...

最新文章

  1. Symfony 使用 hwi/oauth-bundle 实现第三方登录
  2. Swift学习——Swift解释特定的基础(七)
  3. 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程
  4. php——验证身份证是否合法的函数
  5. c语言printf右移,C语言printf(“”)左右(转)
  6. 【Docker】在Docker中安装redis、rabbitmq
  7. 正则表达式匹配后删除
  8. Qt creator
  9. 目录遍历漏洞和文件读取漏洞的区别
  10. Android 使用Webview时,有时抛 java.lang.Throwable: EventHub.removeMessages(int what = 107) warning...
  11. 技术管理者工作成效评估表
  12. 一文快速入门三维人脸重建学习
  13. 游戏三级分类部分代码
  14. 广州华锐互动提供商场AR大屏互动制作一站式解决方案
  15. CISSP-OSG-各章节书面实验整理
  16. 数字信号处理:视频-15-FFT计算线性卷积
  17. iptables ipset详解
  18. Unity游戏开发时注意事项和难点
  19. Wootrade 评级报告:B,展望稳定 | TokenInsight
  20. 解决android studio 控制台乱码

热门文章

  1. MyBatis(增删改查)
  2. mongodb first
  3. 5.3.6 虚拟地址、线性地址和物理地址之间的关系
  4. Riding the Fences USACO 3.3 欧拉路径(dfs+floodfill)
  5. 云朵机(人造云朵,造云机)用在互动百科推搜索新方法中(转)
  6. C#实现MVC模式简要方法(2)
  7. const(常量)和#define(宏定义)区别
  8. C++中的变量不初始化是什么结果?(整型、bool型、字符型)结果都是随机的,不确定
  9. 北京全年天气状况分析
  10. PHP实现定时任务的几种方法