美文网首页
顺时针打印矩阵

顺时针打印矩阵

作者: HamletSunS | 来源:发表于2019-07-29 21:31 被阅读0次

思路:

  • 可以先画个图,自己模拟一下,有个直观感受,然后找一找规律
  • 要求顺时针打印,只要行数和列数>=1即可满足打印条件,可以直接通过4个变量保存好上下左右的边界,可以发现每顺时针遍历一圈,上下左右的边界会向内推进1,直到 上边界的行号大于下边界的行号 或者 左边界的列位于有边界的列的右侧,说明打印完成。再通俗些说,当边界围成的范围只有一行或一列时,就是最后一次打印了。
  • 按照顺时针顺序打印,那么有:
    1. 从左到右,只要左边界小于等于右边界即可打印
    2. 从上到下,只要上边界小于下边界即可打印
    3. 从右到左,首先比较明显的条件是左边界小于右边界,但我们要注意在步骤1中我们已经打印了一行,所以再次横向打印时我们还应该保证跟步骤1打印的不是同一行。不是同一行的话就要求步骤2执行,因此想执行步骤3还需要满足步骤2的条件。
      简单来说,从右到左打印的条件是左边界小于右边界(因为要横向打印)和上边界小于下边界(保证跟1打印的不是同一行)
    4. 从下到上打印,分析同3,可以知道也需要满足2个条件才可以执行打印,这2个条件是上边界小于下边界,左边界小于有边界
class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> ret;
        int row=matrix.size();
        if(row==0)
            return ret;
        int col=matrix[0].size();
        if(col==0)
            return ret;
        
        int left=0,right=col-1,top=0,bottom=row-1;
        while(left<=right && top<=bottom){
            //left -> right
            for(int i=left;i<=right;++i)
                ret.push_back(matrix[top][i]);
            //top->bottom
            for(int i=top+1;i<=bottom;i++)
                ret.push_back(matrix[i][right]);
            //right->left
            if(top<bottom){
                for(int i=right-1;i>=left;i--)
                    ret.push_back(matrix[bottom][i]);
            }
            
            //bottom->top
            if(left<right){
                for(int i=bottom-1;i>=top+1;i--)
                ret.push_back(matrix[i][left]);
            }
            
            left++;
            right--;
            top++;
            bottom--;
        }
        return ret;
    };    
};

相关文章

  • 【不熟练】知识迁移能力-顺时针打印矩阵

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

  • 《剑指offer》— JavaScript(19)顺时针打印矩阵

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

  • 剑指offer——顺时针打印矩阵

    剑指offer——顺时针打印矩阵 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,...

  • 矩阵

    题一:顺时针转圈打印矩阵 题二:“之“字形打印矩阵"之"字形打印矩阵两个指针:(sr,sc)先从第一行往右移动,到...

  • 《剑指offer》(十九)-顺时针打印矩阵(java)

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

  • 顺时针打印矩阵

    题目:顺时针打印矩阵(算法课第四课) 对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩...

  • 顺时针打印矩阵

    题目来源:牛客网--顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,...

  • 剑指Offer--顺时针打印矩阵

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

  • JZ-019-顺时针打印矩阵

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

  • 顺时针打印矩阵

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

网友评论

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

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