Print the Matrix in a clockwise spiral

Given a N by M matrix of numbers, print out the matrix in a clockwise spiral.

Example:

Input:  matrix={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}
Output: 1 2 3 4 5 10 15 20 19 18 17 16 11 6 7 8 9 14 13 12 

Approach

C++

#include <bits/stdc++.h>
using namespace std;

vector<intspiralOrder(vector<vector<int>> &matrix)
{
    vector<intv;
    int m = matrix.size();
    if (m == 0)
        return v;
    int n = matrix[0].size();
    int i;

    int l = 0k = 0;
    while (k < m && l < n)
    {
        //first row from remaining
        for (i = li < ni++)
            v.push_back(matrix[k][i]);
        k++;
        //last col from remaining
        for (i = ki < mi++)
            v.push_back(matrix[i][n - 1]);
        n--;
        // last row from remaining
        if (k < m)
        {
            for (i = n - 1i >= li--)
                v.push_back(matrix[m - 1][i]);
            m--;
        }
        //first col from remaining
        if (l < n)
        {
            for (i = m - 1i >= ki--)
                v.push_back(matrix[i][l]);
            l++;
        }
    }
    return v;
}
int main()
{
    vector<vector<int>> matrix = {{12345},
                                  {678910},
                                  {1112131415},
                                  {1617181920}};

    vector<intspiral = spiralOrder(matrix);

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


No comments:

Post a Comment