Imprime una matriz cuadrada en un círculo

Inserte la descripción de la imagen aquí
Buscando puntos en común desde un nivel macro, de hecho, el proceso de imprimir en círculos es el proceso de imprimir elementos periféricos en el sentido de las agujas del reloj, solo dale un punto en la esquina superior izquierda (como (0,0)) y un punto en el esquina inferior derecha (como (3,3))), puede imprimir 1 2 3 4 8 12 16 15 14 13 9 5; de manera similar, con (1,1) y (2,2), puede imprimir fuera 6 7 11 10. Este proceso de imprimir los elementos en el cuadrado en base a dos puntos se puede extraer y se resuelve todo el problema.

public class Code_06_PrintMatrixSpiralOrder {
    
    

	public static void spiralOrderPrint(int[][] matrix) {
    
    
		int tR = 0;//row
		int tC = 0;//column
		int dR = matrix.length - 1;
		int dC = matrix[0].length - 1;
		while (tR <= dR && tC <= dC) {
    
    
			printEdge(matrix, tR++, tC++, dR--, dC--);
		}
	}

	public static void printEdge(int[][] m, int tR, int tC, int dR, int dC) {
    
    
		if (tR == dR) {
    
     //子矩阵只有一行时
			for (int i = tC; i <= dC; i++) {
    
    
				System.out.print(m[tR][i] + " ");
			}
		} else if (tC == dC) {
    
     //子矩阵只有一列时
			for (int i = tR; i <= dR; i++) {
    
    
				System.out.print(m[i][tC] + " ");
			}
		} else {
    
    
	    //正常情况,打印一圈
			int curC = tC;
			int curR = tR;
			while (curC != dC) {
    
    
				System.out.print(m[tR][curC] + " ");//从tR行开始,往右打印至dC列
				curC++;
			}
			while (curR != dR) {
    
    
				System.out.print(m[curR][dC] + " ");
				curR++;
			}
			while (curC != tC) {
    
    
				System.out.print(m[dR][curC] + " ");
				curC--;
			}
			while (curR != tR) {
    
    
				System.out.print(m[curR][tC] + " ");
				curR--;
			}
		}
	}

	public static void main(String[] args) {
    
    
		int[][] matrix = {
    
     {
    
     1, 2, 3, 4 }, {
    
     5, 6, 7, 8 }, {
    
     9, 10, 11, 12 },
				{
    
     13, 14, 15, 16 } };
		spiralOrderPrint(matrix);

	}

}

Supongo que te gusta

Origin blog.csdn.net/Mr_zhang66/article/details/113657867
Recomendado
Clasificación