码迷,mamicode.com
首页 > 其他好文 > 详细

顺时针打印矩阵

时间:2019-04-27 13:12:56      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:int   --   for   pre   list   顺时针   length   ted   个数   

题目描述

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

分析

贴出代码

import java.util.ArrayList;
public class Solution {
    // new一个数组,以便下面函数能够调用
    ArrayList a = new ArrayList();
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int tR = 0;
        int tC = 0;
        int dR = matrix.length - 1;
        int dC = matrix[0].length - 1;
        // 左上边界最多到达右下边界,用于判断是否还是剥圈打印
        while (tR <= dR && tC <= dC){
            printEdge(matrix, tR++, tC++, dR--, dC--);
        }
        return a;
    }
    public void printEdge(int [][] m, int tR, int tC, int dR,int dC){
        // 先判断是否只是一横行,如果是,打印该横行的列(通常用于内圈)
        if (tR == dR){
            for (int i = tC; i <= dC; i ++){
                a.add(m[tR][i]);
            }
        } else if (tC == dC){ // 再判断是否只是一竖列,如果是,打印该横行的列(通常用于内圈)
            for (int i = tR; i <= dR; i++){
                a.add(m[i][tC]);
            }
        }else {
            // 用两个变量存储,用于判断当前位置
            int curC = tC; 
            int curR = tR;
            // 当前位置未到达当前行的最右列 --> 往右去
            while (curC != dC) {
                a.add(m[tR][curC]);
                curC ++;
            }while (curR != dR){ // 当前位置未到达当前列的最底行 --> 往下去
                a.add(m[curR][dC]);
                curR ++;
            }
            while (curC != tC){  // 当前位置未到达当前行的最左列 --> 往左去
                a.add(m[dR][curC]);
                curC --;
            }
            while (curR != tR){  // 当前位置未到达当前列的最顶行 --> 往上去
                a.add(m[curR][tC]);
                curR--;
            }
        }
    }
}

顺时针打印矩阵

标签:int   --   for   pre   list   顺时针   length   ted   个数   

原文地址:https://www.cnblogs.com/Tu9oh0st/p/10778171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!