54. Spiral Matrix

原创 2018年04月17日 14:44:35

问题描述

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

Example 1:

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

Example 2:

Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]

题目链接:


思路分析

给一二维数组,将它里面的元素逆时针螺旋输出。

设计一个二维数组dirs,保存了四个方向的操作,起始位置为(0, -1),用一个d符号为表示现在指针运行的方向,m为行数,n为列数,计算出总的循环次数i次。

首先开始在第一行逐列输出,然后在到达n-1位置后循环结束,互换行列,开始在最后一列逐行输出,此时n已经是m值了,要去掉一行已遍历的部分。然后是改变方向,用模除即可。

代码

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if (matrix.size() == 0)
            return res;
        int m = matrix.size();
        int n = matrix[0].size();
        int d = 0;
        int dirs[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        int pos[2] = {0, -1};
        int i = m * n;
        while (i > 0){
            for (int j = 0; j < n; j++){
                i--;
                pos[0] += dirs[d][0];
                pos[1] += dirs[d][1];
                res.push_back(matrix[pos[0]][pos[1]]);
            }
            swap(m, n);
            n--;
            d = (d + 1) % 4;
        }
        return res;
    }
};

时间复杂度:O(mn)
空间复杂度:O(1)


反思

在游戏开发中,要用dirs数组保存运动方向。可以通过直接输入matrix第一行进入res提高一定的效率。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BigFatSheep/article/details/79974675

【LeetCode】54. Spiral Matrix 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50771703Subject 出处:https://leetcode.com/pro...
  • crazy1235
  • crazy1235
  • 2016-05-15 10:28:27
  • 5960

LeetCode(54)Spiral Matrix

题目Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral ...
  • fly_yr
  • fly_yr
  • 2015-09-05 21:28:57
  • 1623

[Leetcode]54. Spiral Matrix @python

题目Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral ...
  • qian2729
  • qian2729
  • 2016-01-18 21:27:37
  • 328

54. Spiral Matrix (重要!!!)

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or...
  • gao1440156051
  • gao1440156051
  • 2016-07-17 23:01:15
  • 247

LeetCode54——Spiral Matrix

LeetCode54——Spiral Matrix 还是用图来表述: 从左上开始,按照箭头的顺序,进行4个for循环,完成一圈,一共用count = min(row,col)/2  圈。 ...
  • zhangxiao93
  • zhangxiao93
  • 2015-10-24 21:39:23
  • 1324

[C++]LeetCode: 110 Spiral Matrix (螺旋输出矩阵元素)

题目: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in sp...
  • cinderella_niu
  • cinderella_niu
  • 2015-01-19 16:28:56
  • 1872

leetcode-54. Spiral Matrix

leetcode-54. Spiral Matrix题目: 这题的思路就是如果顺时针转的话。那么每次我们连续向list中添加几个数。例如是3*3的格子,只要依次添加3,2,2,1,1就行,这里就有一定...
  • u011518120
  • u011518120
  • 2016-12-06 10:57:17
  • 143

Leetcode刷题记——54. Spiral Matrix(螺旋矩阵)

一、题目叙述: Given a matrix of m x n elements (m rows, n columns), return all elements of ...
  • sunshine0_0
  • sunshine0_0
  • 2017-02-23 19:00:37
  • 115

LeetCode-54. Spiral Matrix (JAVA)(顺时针打印矩阵)

LeetCode-54. Spiral Matrix (JAVA)(顺时针打印矩阵)
  • mine_song
  • mine_song
  • 2017-04-17 15:44:59
  • 465

剑指offer 面试题20:顺时针打印矩阵及其变形(LeetCode54. Spiral Matrix旋转矩阵) 题解

剑指offer 面试题20:顺时针打印矩阵 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 ...
  • yanglr2010
  • yanglr2010
  • 2016-05-13 13:04:42
  • 1333
收藏助手
不良信息举报
您举报文章:54. Spiral Matrix
举报原因:
原因补充:

(最多只允许输入30个字)