• 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 }
  • 相关阅读:
    【PAT】1001 害死人不偿命的(3n+1)猜想(动态更新)
    文件指令集
    近距离接触电脑
    文件管理
    文件写作方法
    文件读取方法
    打开文件的逻辑
    话术库
    max的逻辑
    抽象化指令
  • 原文地址:https://www.cnblogs.com/qianye/p/3315980.html
Copyright © 2020-2023  润新知