题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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 {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> res = new ArrayList<>();
if(matrix == null || matrix.length == 0) return res;
int tR = 0, tC = 0, dR = matrix.length - 1, dC = matrix[0].length - 1;
while(tR <= dR && tC <= dC) {
printEdge(matrix, tR++, tC++, dR--, dC--, res);
}
return res;
}
public void printEdge(int[][] matrix, int tR, int tC, int dR, int dC, ArrayList<Integer> res) {
//1. 如果矩阵只剩一行
if(tR == dR) {
for(int i = tC; i <= dC; i++) {
res.add(matrix[tR][i]);
}
} else if (tC == dC) {
//2. 如果只剩一列
for(int i = tR; i <= dR; i++) {
res.add(matrix[i][tC]);
}
} else {
//3. 一般过程,上->右->下->左
int curR = tR;
int curC = tC;
while(curC != dC) {
res.add(matrix[curR][curC++]);
}
while(curR != dR) {
res.add(matrix[curR++][curC]);
}
while(curC != tC) {
res.add(matrix[curR][curC--]);
}
while(curR != tR) {
res.add(matrix[curR--][curC]);
}
}
}
}