《剑指offer》——顺时针打印矩阵

可以用一个循环来打印矩阵,每次打印矩阵中的一个圈。
这里写图片描述
这里写图片描述
这里写图片描述

/*
输入一个矩阵matrix,将其按顺时针顺序存入一维数组array中
*/
vector<int> printMatrix(vector<vector<int>> matrix) 
{
    vector<int> array;//一维数组
    if(matrix.empty())
        return array;//如果矩阵为空,输出空的一维数组
    int row = matrix.size();//矩阵的行宽
    int col = matrix[0].size();//矩阵的列宽
    int start = 0;//每一圈的起始座标
    while(row > start * 2 && col > start * 2)//总的结束条件
    {
        int endX = col - start - 1;//每行结束的座标
        int endY = row - start - 1;//每列结束的座标

        for(int i = start; i <= endX; i++)//从左向右打印
            array.push_back(matrix[start][i]);

        if(start < endY)//从上向下打印
            for(int i = start + 1; i <= endY; i++)
                array.push_back(matrix[i][endX]);

        if(start < endX && start < endY)//从右向左打印
            for(int i = endX - 1; i >= start; i--)
                array.push_back(matrix[endY][i]);

        if(start < endX && start < endY - 1)//从下向上打印
            for(int i = endY - 1; i > start; i--)
                array.push_back(matrix[i][start]);
        start++;//起始座标自增
    }
    return array;//返回一维数组 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章