374. 螺旋矩阵

描述

给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。

样例 1:

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

样例 2:

输入:[[ 6,4,1 ], [ 7,8,9 ]]
输出: [6,4,1,9,8,7]

原题传送门


文章目录

  • 374. 螺旋矩阵
    • 描述
    • 样例 1:
    • 样例 2:
  • 题解
  • 最后说两句
  • 声明

题解

public class Solution {/*** @param matrix: a matrix of m x n elements* @return: an integer list*/public List<Integer> spiralOrder(int[][] matrix) {// write your code here// 结果List<Integer> ans = new ArrayList<>();// 方向final int[][] directions          = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};// 变更方向时的边界变化final int[][] boundaryDirections = {{0, 0, 0, 1}, {-1, 0, 0, 0}, {0, -1, 0, 0}, {0, 0, 1, 0}};int m = matrix.length;if (m == 0) {return ans;}int n = matrix[0].length;// 边界// 右下左上int [] boundary = new int[4];boundary[0] = n - 1;boundary[1] = m - 1;// 当前状态int directionIndex = 0;int r = 0;int c = 0;// 执行for (int i = 0; i < m * n; ++i) {// 捡起地上的数字ans.add(matrix[r][c]);// 检查下一步能不能走int[] direction = directions[directionIndex];int nr = r + direction[0];int nc = c + direction[1];if (nc > boundary[0] || nr > boundary[1] || nc < boundary[2] || nr < boundary[3]) {// 到达边界修改边界int[] boundaryDirection = boundaryDirections[directionIndex];for (int j = 0; j < 4; ++j) {boundary[j] += boundaryDirection[j];}// 到达边界换方向++directionIndex;directionIndex %= directions.length;direction = directions[directionIndex];}// 走到下一步r += direction[0];c += direction[1];}return ans;}
}

最后说两句

非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

作者水平有限,如果文章内容有不准确的地方,请指正。

希望小伙伴们都能每天进步一点点。

声明

本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

LintCode领扣算法问题答案:374. 螺旋矩阵相关推荐

  1. 【精】LintCode领扣算法问题答案:入门

    文章目录 23. 判断数字与字母字符 描述 题解 25. 打印X 描述 题解 37. 反转一个3位整数 描述 题解 145. 大小写转换 描述 题解 366. 斐波纳契数列 描述 题解 454. 矩阵 ...

  2. LintCode领扣算法问题答案:149. 买卖股票的最佳时机

    149. 买卖股票的最佳时机 描述 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 1: 输入: ...

  3. LintCode领扣算法问题答案:150. 买卖股票的最佳时机 II

    150. 买卖股票的最佳时机 II 描述 给定一个数组 prices 表示一支股票每天的价格. 你可以完成任意次数的交易, 不过你不能同时参与多个交易 (也就是说, 如果你已经持有这支股票, 在再次购 ...

  4. LintCode领扣算法问题答案:501. 迷你推特

    501. 迷你推特 描述 实现一个迷你的推特,支持下列几种方法 postTweet(user_id, tweet_text). 发布一条推特. getTimeline(user_id). 获得给定用户 ...

  5. 【精】LintCode领扣算法问题答案:1029. 寻找最便宜的航行旅途(最多经过k个中转站)

    1029. 寻找最便宜的航行旅途(最多经过k个中转站) 描述 有n个城市被一些航班所连接.每个航班 (u,v,w) 从城市u出发,到达城市v,价格为w. 给定城市数目 n,所有的航班flights.你 ...

  6. 【精】LintCode领扣算法问题答案:1084. “马”在棋盘上的概率

    1084. "马"在棋盘上的概率 描述 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1) ...

  7. 【精】LintCode领扣算法问题答案:306. 商品列表

    306. 商品列表: 有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用户已 ...

  8. 【精】LintCode领扣算法问题答案:1086. 重复字符串匹配

    1086. 重复字符串匹配: 给定两个字符串A和B,找到A必须重复的最小次数,以使得B是它的子字符串. 如果没有这样的解决方案,返回-1. A和B的长度在1到10000之间. 样例 1 输入 : A ...

  9. 【精】LintCode领扣算法问题答案:316. 组合集

    316. 组合集 描述 给一个数组,给出所有可能的排列组合出的数小于给定的数字 1 <= len(num) <= 10 0 <= num[i] <= 9 target < ...

最新文章

  1. ORACLE 几个我忍了他很多年的问题
  2. 内核配置中 ramdisk 大小修改
  3. URLConnection
  4. java ee 下版本_将旧版本从Java EE 5减少到7
  5. 为什么用java开发app_安卓开发为什么选择用Java语言
  6. 语言 标签倾斜 绘图_一文搞懂ggplot2:老板再也不用担心我的科研绘图
  7. docker安装zookeeper
  8. Kotlin入门(24)如何自定义视图
  9. VS 2012 单元测试简单配置
  10. python集合_Python集合
  11. MySQL的启动脚本
  12. led数字字体_led电视质量排行榜
  13. 【PostgresSQL】对汉字按拼音排序
  14. 必备配色攻略-绿色篇
  15. .Net Core怎么使用Hangfire
  16. 阿里云混合云重磅发布 全栈建云智能管云极致用云
  17. SQL-10-14 4-4 查询具有最高价格的机器的型号,机器包括PC、Laptop、Printer (10分)
  18. 植物大战僵尸:代码实现自动收集阳光
  19. oracle 整理磁盘碎片
  20. 机器学习:python实现LDA降维算法

热门文章

  1. WIFI密码破解 WIFI万能钥匙 显示连接密码去除广告优化版
  2. 最最完整的redis工具类(redis工具类,用这个就够了)
  3. 智慧路灯,未来将取代90%的普通路灯?
  4. 百度mp3下载链接解密
  5. oracle建表分区语句,Oracle 分区表的建立
  6. 12306——(一)火车余票查询API
  7. HDU 2112-HDU Today
  8. 20211123 HDU练习 最短路和最小生成树
  9. linux 魔兽世界_《魔兽世界》如何将我介绍给Linux
  10. PB控件:Graph图形控件