zoukankan      html  css  js  c++  java
  • 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, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    

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

    这道打印矩阵的题以前遇到很多次,但写代码的时候还是有很多种情况没有考虑到,导致花费挺多时间。

    题意:给定一个m*n的矩阵,从外围一层一层的打印出矩阵中的数据

    思路:使用两个结点分别记录当前尚未访问到的矩阵的左上角和右下角的位置,根据两个结点的值可以访问到矩阵最外层的数据,然后让两个结点指向新的位置。

    结束条件:假设记录矩阵访问信息的两个结点为a,b.则当a.x>=b.x 或者a.y>=b.y的时候应该结束。再者可以根据矩阵的大小信息,当m<n的时候两个结点会在横坐标方向相遇,当m>n的时候两个结点会在竖坐标方向相遇。

     1 struct node
     2 {
     3     int x,y;
     4     node(int _x,int _y):x(_x),y(_y){}
     5 };
     6   
     7 vector<int> spiralOrder(vector<vector<int> > &matrix) {
     8     // Start typing your C/C++ solution below
     9     // DO NOT write int main() function
    10     vector<int> data;
    11     int m=matrix.size();
    12     if(m==0)
    13         return data;
    14     int n=matrix[0].size();
    15     if(n==0)
    16         return data;
    17     node a(0,0);
    18     node b(m-1,n-1);
    19     int e = m < n ? m : n;
    20     e = e/2;
    21     while(e--){
    22         for(int i=a.y;i<=b.y;i++)
    23             data.push_back(matrix[a.x][i]);
    24         for(int i=a.x+1;i<=b.x;i++)
    25             data.push_back(matrix[i][b.y]);
    26         for(int i=b.y-1;i>=a.y;i--)
    27             data.push_back(matrix[b.x][i]);
    28         for(int i=b.x-1;i>a.x;--i)
    29             data.push_back(matrix[i][a.y]);
    30         a.x++;
    31         a.y++;
    32         b.x--;
    33         b.y--;
    34     }
    35         
    36     if(a.x==b.x)
    37     {
    38         for(int i=a.y;i<=b.y;i++)
    39             data.push_back(matrix[a.x][i]);
    40     }else if(a.y==b.y){
    41         for(int i=a.x;i<=b.x;i++)
    42             data.push_back(matrix[i][a.y]);
    43     }
    44     return data;
    45 }
  • 相关阅读:
    洛谷—— P2234 [HNOI2002]营业额统计
    BZOJ——3555: [Ctsc2014]企鹅QQ
    CodeVs——T 4919 线段树练习4
    python(35)- 异常处理
    August 29th 2016 Week 36th Monday
    August 28th 2016 Week 36th Sunday
    August 27th 2016 Week 35th Saturday
    August 26th 2016 Week 35th Friday
    August 25th 2016 Week 35th Thursday
    August 24th 2016 Week 35th Wednesday
  • 原文地址:https://www.cnblogs.com/qianye/p/3315980.html
Copyright © 2011-2022 走看看