题目描述:输入一个矩阵 按照从外向里,逆时针打印出每个数字。
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则打印的顺序为 1 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7
public class AnticlockwiseSolutionDemo01 {
public static void main(String[] args) {
int[][] arr = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
int[] res = solution(arr, 4, 4);//数组名 行 列
//遍历二维数组并打印
for (int i : res) {
System.out.println(i);
}
}
private static int[] solution(int[][] arr, int n, int m) {
int beginX = 0;
int beginY = 0;
int endX = m - 1;
int endY = n - 1;
int index = 0;
int[] res = new int[n * m];
while (beginX <= endX && beginY <= endY) {
// 上---->下
if (beginY <= endY) {
for (int i = beginY; i <= endY; i++) {
res[index++] = arr[i][beginX];
}
}
// 左---->右 (两列以上)
if (beginX < endX) {
for (int i = beginX + 1; i <= endX; i++) {
res[index++] = arr[endY][i];
}
}
// 下---->上(两行两列以上)
if (beginX < endX && beginY < endY) {
for (int i = endY - 1; i >= beginY; i--) {
res[index++] = arr[i][endX];
}
}
// 右---->左(三列两行以上)
if (beginX < endX - 1 && beginY < endY) {
for (int i = endX - 1; i >= beginX + 1; i--) {
res[index++] = arr[beginY][i];
}
}
beginX++;
beginY++;
endX--;
endY--;
}
return res;
}
}