Matriz de impresión "Sword Finger Offer" en sentido horario (Java)

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;
    }
}
201 artículos originales publicados · Me gusta9 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/weixin_40992982/article/details/105044617
Recomendado
Clasificación