Spiral Matrix

题目名称
Spiral Matrix—leetCode链接

描述
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].

分析
  将一个二维向量螺旋读出,这道题之前遇到过类似的,只是这里的二维向量的每个维度不一样,解决方法类似,具体看代码。

C++代码

/************************************************************** Copyright:武汉大学计算机学院B507 Author: Ryan Date:2015-11-2 Description:Spiral Matrix **************************************************************/
#include<iostream>
#include<vector>
using namespace std;

vector<int> spiralOrder(vector< vector<int> >& matrix) {
    vector<int> res;
    int a=0,c=0;
    int b=matrix.size()-1;
    int d=matrix[0].size()-1;
    while(a<b && c<d){
        for(int i=c;i<d;i++)
            res.push_back(matrix[a][i]);
        for(int j=a;j<b;j++)
            res.push_back(matrix[j][d]);
        for(int k=d;k>c;k--)
            res.push_back(matrix[b][k]);
        for(int l=b;l>a;l--)
            res.push_back(matrix[l][c]);
        a++;b--;
        c++;d--;
    }
    if(c==d && a<b){
        for(int m=a;m<=b;m++){
            res.push_back(matrix[m][c]);
        }
    }
    else if(c<d && a==b){
        for(int n=c;n<=d;n++){
            res.push_back(matrix[a][n]);
        }
    }
    else if(a==b && c==d){
        res.push_back(matrix[a][c]);
    }
    return res;
}
//测试用例
int main() {
    int a[]={1,2,3};
    int b[]={4,5,6};
    int c[]={7,8,9};
    vector<int> v1(a,a+3);
    vector<int> v2(b,b+3);
    vector<int> v3(c,c+3);
    vector< vector<int> > res;
    res.push_back(v1);
    res.push_back(v2);
    res.push_back(v3);
    vector<int> spiral = spiralOrder(res);
    for(int i=0;i<spiral.size();i++)
        cout<<spiral[i]<" ";
    return 0;

}

测试结果:

Spiral Matrix_第1张图片

总结
  类似题目有类似的解法,需要多多总结。

你可能感兴趣的:(LeetCode)