LintCode领扣算法问题答案:374. 螺旋矩阵
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. 螺旋矩阵相关推荐
- 【精】LintCode领扣算法问题答案:入门
文章目录 23. 判断数字与字母字符 描述 题解 25. 打印X 描述 题解 37. 反转一个3位整数 描述 题解 145. 大小写转换 描述 题解 366. 斐波纳契数列 描述 题解 454. 矩阵 ...
- LintCode领扣算法问题答案:149. 买卖股票的最佳时机
149. 买卖股票的最佳时机 描述 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 1: 输入: ...
- LintCode领扣算法问题答案:150. 买卖股票的最佳时机 II
150. 买卖股票的最佳时机 II 描述 给定一个数组 prices 表示一支股票每天的价格. 你可以完成任意次数的交易, 不过你不能同时参与多个交易 (也就是说, 如果你已经持有这支股票, 在再次购 ...
- LintCode领扣算法问题答案:501. 迷你推特
501. 迷你推特 描述 实现一个迷你的推特,支持下列几种方法 postTweet(user_id, tweet_text). 发布一条推特. getTimeline(user_id). 获得给定用户 ...
- 【精】LintCode领扣算法问题答案:1029. 寻找最便宜的航行旅途(最多经过k个中转站)
1029. 寻找最便宜的航行旅途(最多经过k个中转站) 描述 有n个城市被一些航班所连接.每个航班 (u,v,w) 从城市u出发,到达城市v,价格为w. 给定城市数目 n,所有的航班flights.你 ...
- 【精】LintCode领扣算法问题答案:1084. “马”在棋盘上的概率
1084. "马"在棋盘上的概率 描述 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1) ...
- 【精】LintCode领扣算法问题答案:306. 商品列表
306. 商品列表: 有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用户已 ...
- 【精】LintCode领扣算法问题答案:1086. 重复字符串匹配
1086. 重复字符串匹配: 给定两个字符串A和B,找到A必须重复的最小次数,以使得B是它的子字符串. 如果没有这样的解决方案,返回-1. A和B的长度在1到10000之间. 样例 1 输入 : A ...
- 【精】LintCode领扣算法问题答案:316. 组合集
316. 组合集 描述 给一个数组,给出所有可能的排列组合出的数小于给定的数字 1 <= len(num) <= 10 0 <= num[i] <= 9 target < ...
最新文章
- ORACLE 几个我忍了他很多年的问题
- 内核配置中 ramdisk 大小修改
- URLConnection
- java ee 下版本_将旧版本从Java EE 5减少到7
- 为什么用java开发app_安卓开发为什么选择用Java语言
- 语言 标签倾斜 绘图_一文搞懂ggplot2:老板再也不用担心我的科研绘图
- docker安装zookeeper
- Kotlin入门(24)如何自定义视图
- VS 2012 单元测试简单配置
- python集合_Python集合
- MySQL的启动脚本
- led数字字体_led电视质量排行榜
- 【PostgresSQL】对汉字按拼音排序
- 必备配色攻略-绿色篇
- .Net Core怎么使用Hangfire
- 阿里云混合云重磅发布 全栈建云智能管云极致用云
- SQL-10-14 4-4 查询具有最高价格的机器的型号,机器包括PC、Laptop、Printer (10分)
- 植物大战僵尸:代码实现自动收集阳光
- oracle 整理磁盘碎片
- 机器学习:python实现LDA降维算法