美文网首页
面试题29:顺时针打印矩阵

面试题29:顺时针打印矩阵

作者: 潘雪雯 | 来源:发表于2020-05-12 17:56 被阅读0次

    题目

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。如下所示矩阵:


    image.png

    则依次打印输出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

    解题思路

    1. 循环继续的条件是columns>startX*2且startY*2
    2. 打印分四步,每一步根据起始坐标和终止坐标用一个循环打印一行或一列
      第一步:从左到右打印一行
      第二步:从上到下打印一列,
      前提条件是终止行号大于起始行号start < endY
      第三步:从右到左打印一行,前提条件是圈内至少有两行两列,终止行号大于起始行号,终止列号大于起始列号。start < endX && start < endY
      第四步:从下到上打印一列,前提条件是至少有三行两列,终止行号比起始行号至少大2,同时终止列号大于起始列号。start < endX && start < endY-1

    代码

    class Solution{
      public:
        
        void printMatrixincircle(int numbers[][columns],int start)
        {
            int endX = columns - 1 - start;
            int endY = rows - 1 - start;
            //从左到右打印一行
            for(int i = start;i<=endX;++i)
            {
                int number = numbers[start][i];
                cout << number << " ";
            }
            //从上到下打印一列
            if(start < endY)
            {
                for(int i = start + 1;i<= endY;++i)
                {
                    int number = numbers[i][endX];
                    cout << number << " ";
                }
            }
            //从右往左打印一行
            if(start < endX && start < endY)
            {
                for(int i = endX-1;i>=start;--i)
                {
                    int number = numbers[endY][i];
                    cout << number << " ";
                }
            }
            //从下往上打印一列
            if(start < endX && start < endY-1)
            {
                for(int i = endY -1;i>=start+1;--i)
                {
                    int number = numbers[i][start];
                    cout << number << " ";
                }
            }
        }
    
        void printMatrixClockwisely(int numbers[][columns])
        {
            if(numbers == NULL || columns <= 0 || rows <= 0)
            {
                return;
            }
            int start = 0;
            while(columns>start *2 && rows>start *2)
            {
                printMatrixincircle(numbers,start);
                ++start;
            }
        }
    };
    

    完整代码见Github

    相关文章

      网友评论

          本文标题:面试题29:顺时针打印矩阵

          本文链接:https://www.haomeiwen.com/subject/jlabnhtx.html