C++ 数组遍历(顺时针遍历)

顺时针打印矩阵(数组遍历)

    • 题目描述
    • 结果
    • 知识点
    • 代码
    • 总结

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

结果

运行时间:3ms

占用内存:480k

知识点

  • 数组遍历
    • 数组定义 参考
    • 数组遍历判断 如下
  • vector 容器,栈操作

代码

class Solution {
     
public:
    vector<int> printMatrix(vector<vector<int>> matrix) {
     
        int row=matrix.size();//列数(使用时下标-1)
        int col=matrix[0].size();//行数
        vector<int> result;//栈 vector容器
        /*                                    top
            array[0][0]=1	array[0][1]=2	array[top][2]=3	array[0][3]=4	array[0][4]=5
       left array[left][0]=6	array[1][1]=7	array[1][2]=8	array[1][3]=9	array[1][right-1]=10  right
            array[2][0]=11	array[2][1]=12	array[btm][2]=13	array[2][3]=14	array[2][4]=15
                                              btm
        */
        /*
        每一行或列的输出都会使得下次输出减少一行或一列
        如何判断还有项需要输出为重点!!!
        剥皮过程::::::::::
        第一行判断:无
        最后一列判断:首行数<尾行数(有宽度)
        最后一行判断:首行数<尾行数 且 首列数<尾列数(有长度,有宽度)
        第一列判断:首行数+1<尾行数 且 首列数<位列数(有长度,有宽度) (首行+1 因为引进去了两行了)
        */
        int left=0,right=col-1,top=0,btm=row-1;//数组下标从零开始,所以减一
        while(left<=right&&top<=btm)//左右 上下 如果没完成
            {
     
            for(int i=left;i<=right;i++)//首行 行不变,列++ 
                result.push_back(matrix[top][i]);
            if(top<btm)//用行判断是否有列可以输出;;;多余的行数中才能有列
                for(int i=top+1;i<=btm;i++)//最右列,列不变,行++
                    result.push_back(matrix[i][right]);
            if(top<btm&&left<right)//有多余的行+多于的列;;才能有最下面的一行输出
                for(int i=right-1;i>=left;i--)//最下行,行不变,列--
                    result.push_back(matrix[btm][i]);
            if(top+1<btm&&left<right)//有多余的行+多余的列;;才能有最左边的一列输出,top+1 :: 上边已经输出了一列。
                for(int i=btm-1;i>=top+1;i--)//最左列,列不变,行++
                    result.push_back(matrix[i][left]);
            left++;right--;top++;btm--;//
        }
        return result;
    }
};

总结

1)写代码注意判断条件!!!
2)首先找输入输出,判断变与不变(什么时候变)!!!
3)好脑子不如画个图,写写数!!! 何况你有好脑子吗?你有脑子吗?
4)代码变量名称起的好,省去好多!!!多敲几个字母,多定义几个变量不一定是坏事!!!
4)代码相关

二维数组a[M-1][N-1]={M*N},

二维数组参考

你可能感兴趣的:(工作刷题)