leetcode

题目链接
Description
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]

解题思路
只想到了比较直接的方法,一层层遍历。没层对四条边分别做处理。需要讨论矩阵行和列的大小。

示例代码

vector<int> spiralOrder(vector<vector<int>>& matrix) {
    vector<int> nums;
    int n = matrix.size()-1;
    int m = matrix[0].size()-1;
    int index = 0;
    int cn = min(matrix.size()/2, matrix[0].size() / 2 );
    for (int i = 0; i < cn; i++)
    {
        for (int k = index; k <= m - index; k++)
            nums.push_back(matrix[i][k]);
        for (int k = index+1; k <= n - index; k++)
            nums.push_back(matrix[k][m - i]);
        for (int k = m - index-1; k >= index; k--)
            nums.push_back(matrix[n - i][k]);
        for (int k = n - index-1; k >= index + 1; k--)
            nums.push_back(matrix[k][i]);
        index++;
    }
    if (matrix.size() < matrix[0].size())
    {
        if (matrix.size() % 2 == 1)
        {
            int i = cn;
            for (int k = index; k <= m - index; k++)
                nums.push_back(matrix[i][k]);
        }
    }
    else
    {
        if (matrix[0].size() % 2 == 1)
        {
            int i = cn;
            for (int k = index; k <= n - index; k++)
                nums.push_back(matrix[k][i]);

        }
    }

    for (int i = 0; i < nums.size(); i++)
        cout << nums[i] << " ";
    return nums;
}