顺时针打印矩阵
Posted tu9oh0st
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺时针打印矩阵相关的知识,希望对你有一定的参考价值。
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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--;
}
}
}
}
以上是关于顺时针打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章