文档章节

LeetCode:Spiral Matrix - 螺旋输出矩阵中的元素

北风其凉
 北风其凉
发布于 2015/11/02 22:27
字数 619
阅读 2K
收藏 0

1、题目名称

Spiral Matrix(螺旋输出矩阵中的元素)

2、题目地址

https://leetcode.com/problems/spiral-matrix/

3、题目内容

英文:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

中文:给出一个m行n列的矩阵,以螺旋顺序返回矩阵中的所有元素。

例如:现有矩阵如下:

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

则输出应为 [1, 2, 3, 6, 9, 8, 7, 4, 5]

4、解题方法1

一种方法是使用四个数字分别记录上下左右四个边界的位置,不断循环收窄这些边界,最终当两个边界重叠时,结束循环。

Java代码如下:

import java.util.LinkedList;
import java.util.List;

/**
 * @功能说明:LeetCode 54 - Spiral Matrix
 * @开发人员:Tsybius2014
 * @开发时间:2015年11月2日
 */
public class Solution {
    
    public List<Integer> spiralOrder(int[][] matrix) {

        LinkedList<Integer> linkedList = new LinkedList<Integer>();
        
        if (matrix == null || matrix.length == 0) {
            return linkedList;
        }
        
        //左右上下四个边界
        int left = 0;
        int right = matrix[0].length - 1;
        int top = 0;
        int bottom = matrix.length - 1;

        int i;
        while (true) {
            
            //上边,自左至右
            for (i = left; i <= right; i++) {
                linkedList.add(matrix[top][i]);
            }
            if (++top > bottom) {
                break;
            }
            
            //右边,自上至下
            for (i = top; i <= bottom; i++) {
                linkedList.add(matrix[i][right]);
            }
            if (left > --right) {
                break;
            }
            
            //下边,自右至左
            for (i = right; i >= left; i--) {
                linkedList.add(matrix[bottom][i]);
            }
            if (top > --bottom) {
                break;
            }
            
            //左边,自下至上
            for (i = bottom; i >= top; i--) {
                linkedList.add(matrix[i][left]);
            }
            if (++left > right) {
                break;
            }
            
        }
        
        return linkedList;
    }
}

5、解题方法2

另一种方法是预先指定好遍历四个边时的坐标增减方向,并在每次沿一个方向行进完毕后,计算出下个方向应行进的单位数。

Java代码如下:

import java.util.LinkedList;
import java.util.List;

/**
 * @功能说明:LeetCode 54 - Spiral Matrix
 * @开发人员:Tsybius2014
 * @开发时间:2015年11月2日
 */
public class Solution {
    
    public List<Integer> spiralOrder(int[][] matrix) {

        LinkedList<Integer> linkedList = new LinkedList<Integer>();
        
        if (matrix == null || matrix.length == 0) {
            return linkedList;
        }
        
        //行进方向
        int[][] direction = new int[][] {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        
        //以初始点(0,0)的初始行进方向计算出的初始点前一个点的行列坐标
        int x = 0;
        int y = -1;
        
        //矩阵的行数和列数
        int m = matrix.length;
        int n = matrix[0].length;
        
        //counter决定了转动的具体方向
        int counter = 0;
        while (m > 0 && n > 0) {
            int k;
            //判断横向移动还是纵向移动
            if (counter % 2 == 0) {
                k = n;
                m--;
            } else {
                k = m;
                n--;
            }
            //沿一个方向进行移动
            while (k-- != 0) {
                x += direction[counter][0];
                y += direction[counter][1];
                linkedList.add(matrix[x][y]);
            }
            //调整方向
            counter = (counter + 1) % 4;
        }
        
        return linkedList;
    }
}

END

© 著作权归作者所有

北风其凉

北风其凉

粉丝 123
博文 497
码字总数 462305
作品 4
朝阳
程序员
私信 提问
加载中

评论(0)

LeetCode:Spiral Matrix II - 将元素1-n^2以螺旋序填充到矩阵

1、题目名称 Spiral Matrix(螺旋输出矩阵中的元素) 2、题目地址 https://leetcode.com/problems/spiral-matrix-ii/ 3、题目内容 英文:Given an integer n, generate a square matrix fill...

北风其凉
2015/11/03
413
0
Leetcode【54、59、885】

问题描述:【Array】54. Spiral Matrix 解题思路: 这道题是给一个矩阵,按顺时针螺旋输出所有数字。 这道题做法很直接,就是从最外层到最内层一层一层按照顺时针螺旋输出各个数字即可。如下...

牛奶芝麻
2019/07/02
0
0
LeetCode:Spiral Matrix I II

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [[ 1, 2, 3 ],[ 4,......

tenos
2014/06/07
0
0
【LeetCode】Spiral Matrix(螺旋矩阵)

这是LeetCode里的第54道题。 题目要求: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9...

1000sakura
2018/11/28
0
0
[算法][LeetCode] 数组

[算法][LeetCode]Search a 2D Matrix——二维数组的二分查找 http://www.cnblogs.com/hiddenfox/p/3402797.html 将排序的二维数组看做一维数组来处理。不重构数据的情况下,将二分查找的一维...

素雷
2017/10/19
8
0

没有更多内容

加载失败,请刷新页面

加载更多

【 开发指南 】智能家居技能

本文作者:DuerOs 目录 一、教学视频 二、整体架构 三、开发步骤&资料整理 四、常见问题解答 五、智能家居文档 树状提纲 ————————————————————————————————...

百度开发者中心
2019/03/29
12
0
008. 并发容器类 Map

1. JDK 源码学习方法 1. 演绎推导法 示例:因果推理。 因为 JAVA 中只提供了 BIO 和 NIO 两种方式,所以一切框架中,涉及到网络处理的,都可以用这两个知识点去探究原理。 2. 归纳总结法 示例...

紫穹
46分钟前
58
0
如何使用sed替换换行符(\\ n)? - How can I replace a newline (\n) using sed?

问题: How can I replace a newline (" \\n ") with a space (" 如何将换行符(“ \\n ”)替换为空格(“ ") using the sed command? “)使用sed命令? I unsuccessfully tried: 我尝试失......

javail
52分钟前
64
0
OSChina 周一乱弹 —— 原来这叫分别焦虑

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《A Careful Tearing》- Levi Patel 手机党少年们想听歌,请使劲儿戳(这里) 清明...

小小编辑
今天
164
0
trim、stripslashes、htmlspecialchars函数

通过 PHP 验证表单数据 我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。 在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容: <script>...

imzchloe
今天
122
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部