輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8
阿新 • • 發佈:2019-02-09
import java.util.ArrayList; import java.util.Arrays; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<Integer>(); int[][] m = matrix; //一般情況:多行多列 while(m.length > 1 && m[0].length > 1){ for(int i = 0; i < m[0].length; ++i){ list.add(m[0][i]); } m = rotateMatrix(eraseFirstRow(m)); } //只有一行或一列 if(m[0].length == 1){ for(int i = 0; i < m.length; ++i){ list.add(m[i][0]); } return list; } if(m.length == 1){ for(int i = 0; i < m[0].length; ++i){ list.add(m[0][i]); } return list; } return list; } //矩陣逆時針旋轉90度 public static int[][] rotateMatrix(int[][] matrix){ int col = matrix[0].length; int row = matrix.length; int[][] rotateMatrix = new int[col][row]; for(int i = col-1; i >= 0; i--){ for(int j = 0; j < row; j++){ rotateMatrix[col-1-i][j] = matrix[j][i];//原矩陣從右往左、從上到下,新矩陣從左到右、從上往下 } } return rotateMatrix; } //刪除矩陣的第一行並返回新的矩陣 public static int[][] eraseFirstRow(int[][] matrix){ int col = matrix[0].length; int row = matrix.length; int[][] erasedMatrix = new int[row-1][col]; for(int i = 1; i < row; i++){ for(int j = 0; j < col; j++){ erasedMatrix[i-1][j]=matrix[i][j]; } } return erasedMatrix; } }