文章目录
- 顺时针打印矩阵
- 题目
- 思路
- 代码实现
顺时针打印矩阵
题目
描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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]
数据范围:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
牛客题目链接
思路
我们主要分析以下几种情况
- 只有一行的时候,我们只需要遍历打印即可;
- 只有一列的时候,我们同样只需要遍历打印即可;
- 对于多行多列的情况,我们需要按照规定的顺序进行打印;
代码实现
private ArrayList<Integer> result = new ArrayList<>();
public ArrayList<Integer> printMatrix(int[][] matrix) {
if (matrix == null || matrix[0] == null || matrix[0].length == 0) {
return result;
}
int tR = 0; //表示第一行下标
int tC = 0; //表示第一列下标
int index = 0; //表示当前集合下标
int dR = matrix.length - 1; //最后一行下标
int dC = matrix[0].length - 1; //最后一列下标
while (tR <= dR && tC <= dC) {
printMatrix(matrix, tR++, tC++, dR--, dC--, index); //不断往中间靠拢
}
return result;
}
private void printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, int index) {
if (tR == dR) {
//只有一行的情况
for (int i = dR; i <= dC; i++) {
result.add(matrix[tR][i]);
}
} else if (tC == dC) {
//只有一列的情况
for (int i = tR; i <= dR; i++) {
result.add(matrix[i][tC]);
}
} else {
//遵守矩阵打印规则
int curR = tR;
int curC = tC;
while (curC != dC) {
result.add(matrix[curR][curC]);
curC++;
}
while (curR != dR) {
result.add(matrix[curR][curC]);
curR++;
}
while (curC != tC) {
result.add(matrix[curR][curC]);
curC--;
}
while (curR != tR) {
result.add(matrix[curR][curC]);
curR--;
}
}
}