输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解析:两种方法:
方法①:按题来,一个个添加到list中
方法②:旋转数组,删除一行后,逆时针旋转90度,继续删除;循环(个人认为此方法不是特别好,可能哪天会改变想法)
代码:
方法①:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
return list;
int up = 0;
int down = matrix.length - 1;
int left = 0;
int right = matrix[0].length - 1;
while(true){
for(int r = left; r <= right; r++){
list.add(matrix[up][r]);
}
up++;
if(up > down){
break;
}
for(int d = up; d <= down; d++){
list.add(matrix[d][right]);
}
right--;
if(right < left){
break;
}
for(int l = right; l >= left; l--){
list.add(matrix[down][l]);
}
down--;
if(down < up){
break;
}
for(int u = down; u >= up; u--){
list.add(matrix[u][left]);
}
left++;
if(left > right){
break;
}
}
return list;
}
}
*********************************************************************************************************************
方法②
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
int row = matrix.length;
while(row != 0){
for(int i = 0; i < matrix[0].length; i++){
list.add(matrix[0][i]);
}
if(row == 1)
break;
matrix = newMatrix(matrix);
row = matrix.length;
}
return list;
}
private int[][] newMatrix(int [][] matrix){
int row = matrix.length;
int col = matrix[0].length;
int[][] newmatirx = new int[col][row - 1];
for(int j = col - 1; j >= 0; j--){
for(int i = 1; i < row ; i++){
newmatirx[col-1-j][i-1] = matrix[i][j];
}
}
return newmatirx;
}
}