Descripción del título
Ingrese una matriz e imprima cada número por orden en el sentido de las agujas del reloj desde afuera hacia adentro. Por ejemplo, si ingresa la siguiente matriz 4 X 4: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 luego imprima Los números 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
Código AC
Esta pregunta es bastante similar a una pregunta de entrevista que hice antes. En ese momento, utilicé un método muy problemático al deslizar mi espada para ofrecer. Ahora lo simplifico. El
orden de impresión es de izquierda a derecha, de arriba a abajo. De derecha a izquierda, de abajo hacia arriba, pero preste atención al problema de esta pregunta es considerar el caso de solo una fila o una columna ~
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
int rows=matrix.length,cols=matrix[0].length;
if(rows==0||cols==0)
return null;
ArrayList<Integer> res=new ArrayList<>();
int top=0,bottom=rows-1,left=0,right=cols-1;
while(left<=right&&top<=bottom){
for(int i=left;i<=right;i++) {res.add(matrix[top][i]);}
top++;
for(int i=top;i<=bottom;i++) {res.add(matrix[i][right]);}
right--;
//加判断是为了判别只有一行或者一列的情况。
if(top<=bottom)
for(int i=right;i>=left;i--) {res.add(matrix[bottom][i]);}
bottom--;
if(left<=right)
for(int i=bottom;i>=top;i--) {res.add(matrix[i][left]);}
left++;
}
return res;
}
}