美文网首页
面试题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

相关文章

  • 剑指offer第二版-29.顺时针打印矩阵

    本系列导航:剑指offer(第二版)java实现导航帖 面试题29:顺时针打印矩阵 题目要求:输入一个矩阵,按照从...

  • 剑指 Offer 29. 顺时针打印矩阵

    剑指 Offer 29. 顺时针打印矩阵[https://leetcode-cn.com/problems/shu...

  • 剑指 Offer 29. 顺时针打印矩阵

    剑指 Offer 29. 顺时针打印矩阵[https://leetcode-cn.com/problems/shu...

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

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 思路:定义上下左右四个变量,初始边界值,定义外层循环...

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

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

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

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。思路:先分析每一圈的起点,我们发现左上角的x和y...

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

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2...

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

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 思路 应当分为上下左右四步,并且设置一个boo...

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

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3...

  • 29、顺时针打印矩阵

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3...

网友评论

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

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