顺时针打印矩阵

作者: lvlvforever | 来源:发表于2018-08-02 17:07 被阅读16次

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

这道题主要是对于边界情况判断比较多,同时需要考虑一行、一列的情况。

对于一行 一列这两种情况,我提前做了判断,while循环里不必去兼容这种情况。

 public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> list = new ArrayList<>();
        if (matrix == null || matrix.length < 1) {
            return list;
        }
        int rows = matrix.length;
        int cols = matrix[0].length;
        //一行
        if (rows == 1) {
            for (int i = 0; i < cols; i++) {
                list.add(matrix[0][i]);
            }
            return list;
        }
    //一列
        if (cols == 1) {
            for (int i = 0; i < rows; i++) {
                list.add(matrix[i][0]);
            }
            return list;
        }
        int start = 0;
        while (start * 2 < rows && start * 2 < cols) {
// 从左到右 肯定存在
            for(int i = start; i <= cols - start - 1; i++) {
                list.add(matrix[start][i]);
            }
            int curCol = cols - start - 1;
//从右上到右下  当前的col必须大于start值
            if(curCol > start){
                for(int i = start+1; i <= rows - start - 1; i++) {
                    list.add(matrix[i][curCol]);
                }
            }
            int curRow  = rows - start - 1;
// 从右下到左下 当前的row必须大于开始行号
            if(curRow > start){
                for(int i = cols - start - 2; i >= start; i--) {
                    list.add(matrix[rows - start - 1][i]);
                }
            }
  //从左下到左上 当前列不能是start列
            if(start != curCol) {
                for (int i = rows - start - 2; i >= start + 1; i--) {
                    list.add(matrix[i][start]);
                }
            }
            start++;
        }
        return list;
    }

相关文章

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

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

  • 《剑指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/cvdsvftx.html