題目描述
輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 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.
給定矩陣:
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
public class Solution {
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (matrix == null) {
return list;
}
int rows = matrix.length; // 行數
int columns = matrix[0].length; // 列數
// 每次從(0,0) (1,1) (2,2)開始的
int times = 0; // 第幾次循環
while(rows > times * 2 && columns > times * 2){
int numX = columns - 1 - times;
int numY = rows - 1 - times;
// 打印第一橫行
for (int i = times; i <= numX; i++) {
System.out.print(matrix[times][i] + " ");
list.add(matrix[times][i]);
}
if (times < numY) {
// 打印第一列
for (int i = times + 1; i <= numY; i++) {
System.out.print(matrix[i][numX] + " ");
list.add(matrix[i][numX]);
}
}
if (times < numX && times < numY) {
// 打印最下面的一行
for (int i = numX - 1; i >= times; i--) {
System.out.print(matrix[numY][i] + " ");
list.add(matrix[numY][i]);
}
}
if (times < numX && times < numY - 1) {
// 打印最左邊的一列
for (int i = numY - 1; i >= times + 1; i--) {
System.out.print(matrix[i][times] + " ");
list.add(matrix[i][times]);
}
}
times++;
}
return list;
}
public static void main(String[] args) {
Solution s = new Solution();
// int[][] num = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12
// },{13, 14, 15, 16 } };
int[][] num = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
ArrayList<Integer> list = s.printMatrix(num);
System.out.println(list);
}
}