剑指offer:顺时针打印矩阵

来源:互联网 发布:测试常用的linux命令 编辑:程序博客网 时间:2024/04/30 20:20

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

#include <stdio.h>#include <iostream>#include <vector>using namespace std;class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix) {              int columns = 0;        int rows = 0;        vector<int> vec;        int i = 0, j = 0;        int cycles = 0;        /* 每一圈的左上坐标 */        int left_up_x = 0, left_up_y = 0;        /* 每一圈的右下坐标 */        int right_down_x = 0, right_down_y = 0;        /* 得到行数 */        rows = matrix.size();        /* 如果二维数组是空的,直接返回 */        if(0 == rows)        {            return vec;        }        /* 得到列数 */        columns = matrix[0].size();        /* 得到顺时针的圈数 */        cycles = (rows+1)/2;        cycles = ((columns+1)/2) > cycles ? cycles:((columns+1)/2);        for(i = 0; i < cycles; i++)        {            /* 得到边界条件 */            left_up_x = i;            left_up_y = i;            right_down_x = columns - 1 - i;            right_down_y = rows - 1 - i;            /* 打印上面的一行 */            for(j = i; j <= right_down_x; j++)            {                vec.push_back(matrix[i][j]);            }            /* 打印右边的一列 */            if(right_down_y > left_up_y)            {                for(j = i+1; j <= right_down_y; j++)                {                    vec.push_back(matrix[j][right_down_x]);                }            }            /* 打印下面的一行 */            if(right_down_x > left_up_x && right_down_y > left_up_y)            {                for(j = right_down_x - 1; j >= left_up_x; j--)                {                    vec.push_back(matrix[right_down_y][j]);                }            }            /* 打印左边的一列 */            if(right_down_y-1 > left_up_y && right_down_x > left_up_x)            {                for(j = right_down_y-1; j >= left_up_y+1; j--)                {                    vec.push_back(matrix[j][left_up_x]);                }            }        }               return vec;    }};int main(){    vector<int> vec(4);    vector<int> vec1(1);    vector<int> vecReturn(16);    Solution s;    vector<vector<int> > v;    vector<vector<int> > v1;    vector<vector<int> > v2;    int i = 0, j = 0;    for(i = 0; i < 4; i++)    {        v.push_back(vec);        v1.push_back(vec1);    }    for(i = 0; i < 4; i++)    {        for(j = 0; j < 4; j++)        {            v[i][j] = i*4+j +1;        }    }    v1[0][0] = 1;    v1[1][0] = 2;    v1[2][0] = 3;    v1[3][0] = 4;    v2.push_back(vec);    v2[0][0] = 1;    v2[0][1] = 2;    v2[0][2] = 3;    v2[0][3] = 4;    vecReturn = s.printMatrix(v2);    for(i = 0; i < 16; i++)    {        cout << vecReturn[i] << " ";    }    cout << endl;    return 0;}
0 0
原创粉丝点击