Spiral Matrix

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

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, 5, 6 ],
 [ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].

分析

举个例子自己从头到尾把数字列出来,很容易就找到规律了:
假设一维数组的坐标为x,取值范围是xMin~xMax;二维数组的坐标为y,取值范围是yMin~yMax。(也就是数组表示为int[y][x])
1. 从左到右,y=yMin,x: xMin->xMax,yMin++
2. 从上到下,x=xMax,y: yMin->yMax,xMax--
3. 从右到左,y=yMax,x: xMax->xMin,yMax--
4. 从下到上,x=xMin,y: yMax->uMin,xMin++
结束条件,xMin==xMax或者yMin==yMax
 
还要要注意的地方:空数组的情况要处理。
 
C++实现代码:
#include<iostream>
#include<vector>
using namespace std;

class Solution
{
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix)
    {
        if(matrix.empty()||matrix[0].empty())
            return vector<int>();
        vector<int> ret;
        int xmin=0;
        int ymin=0;
        int xmax=matrix[0].size()-1;
        int ymax=matrix.size()-1;
        ret.push_back(matrix[0][0]);
        int i=0,j=0;
        while(1)
        {
            while(i<xmax)
                ret.push_back(matrix[j][++i]);
            if(++ymin>ymax)
                break;
            while(j<ymax)
                ret.push_back(matrix[++j][i]);
            if(--xmax<xmin)
                break;
            while(i>xmin)
                ret.push_back(matrix[j][--i]);
            if(--ymax<ymin)
                break;
            while(j>ymin)
                ret.push_back(matrix[--j][i]);
            if(++xmin>xmax)
                break;
        }
        return ret;
    }
};

int main()
{
    Solution s;
    vector<vector<int> > vec= {{1,2}};
    vector<int> result=s.spiralOrder(vec);
    for(auto a:result)
        cout<<a<<" ";
    cout<<endl;
}

 

相关文章
|
索引
LeetCode 54. Spiral Matrix
给定m×n个元素的矩阵(m行,n列),以螺旋顺序[顺时针]返回矩阵的所有元素
90 0
LeetCode 54. Spiral Matrix
LeetCode 59. Spiral Matrix II
给定正整数n,以螺旋顺序生成填充有从1到n2的元素的方阵。
98 0
|
JSON Java Android开发
Matrix 之 ApkChecker 的使用
Matrix 之 ApkChecker 的使用
273 0
Matrix 之 ApkChecker 的使用
【1105】Spiral Matrix (25分)【螺旋矩阵】
【1105】Spiral Matrix (25分)【螺旋矩阵】 【1105】Spiral Matrix (25分)【螺旋矩阵】
127 0
|
Java 索引 Python
Leetcode 54:Spiral Matrix 螺旋矩阵
54:Spiral Matrix 螺旋矩阵 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
834 0
|
机器学习/深度学习 算法
Matrix Factorization
Matrix Factorization ①linearNetwork Hypothesis 机器学习的作用就是要从一堆数据中学习到学习到某种能力,然后用这种skill来预测未来的结果。
1062 0
|
Android开发